Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile

На всСки няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ индустрията Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° софтуСр ΠΏΡ€Π΅Ρ‚ΡŠΡ€ΠΏΡΠ²Π° промяна Π² ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Ρ‚Π°. Π•Π΄Π½ΠΎ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ явлСния ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ нарастващия интСрСс към концСпцията Π·Π° микроуслуги. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ микроуслугитС Π½Π΅ са Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° тСхнология, Π΅Π΄Π²Π° напослСдък популярността ΠΈΠΌ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ скочи Π΄ΠΎ Π½Π΅Π±Π΅Ρ‚ΠΎ.

Π“ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΈ услуги сСга сС замСнят ΠΎΡ‚ нСзависими самостоятСлни микроуслуги. ΠœΠΈΠΊΡ€ΠΎΡƒΡΠ»ΡƒΠ³Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ слуТи Π½Π° Π΅Π΄Π½Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ спСцифична Ρ†Π΅Π». НапримСр, Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π‘Π£Π‘Π”, СкспрСсно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, услуга Solr.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile

Π’ наши Π΄Π½ΠΈ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° си прСдставим Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²Π° софтуСрна систСма Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° микроуслуги. И Ρ‚Π°Π·ΠΈ ситуация ΠΎΡ‚ своя страна Π½ΠΈ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Docker.

Π΄ΠΎΠΊΠ΅Ρ€

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π΄ΠΎΠΊΠ΅Ρ€, Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ внСдряванСто Π½Π° микроуслуги, сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π° ΠΏΠΎΡ‡Ρ‚ΠΈ Π² индустриалСн стандарт. На уСбсайта Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅, Ρ‡Π΅ Docker Π΅ СдинствСната нСзависима ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π·Π° контСйнСризация, която позволява Π½Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π±Π΅Π· усилиС Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ всякакви прилоТСния, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Π° Π³ΠΈ разпространяват ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ във всяка срСда - ΠΎΡ‚ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΈ ΠΎΠ±Π»Π°Ρ†ΠΈ Π΄ΠΎ ΠΊΡ€Π°ΠΉΠ½ΠΈ систСми.

Π”ΠΎΠΊΠ΅Ρ€ ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π°Π½Π΅

ВСхнология Π”ΠΎΠΊΠ΅Ρ€ ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π°Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈ прилоТСния. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Docker Compose ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π½Π° ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»Ρ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с Docker Compose, YAML Ρ„Π°ΠΉΠ» сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° услуги Π½Π° прилоТСния ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° тяхното взаимодСйствиС ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Docker Compose Π΅ инструмСнт Π·Π° описванС ΠΈ стартиранС Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈ Docker прилоТСния.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
Π”Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° хост систСма

GNU Make

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° make, ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Π΅ инструмСнт Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° асСмблиранСто Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΡ‚ изходния ΠΊΠΎΠ΄. ΠšΠ°Ρ‚ΠΎ цяло ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ make ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ Π·Π° всСки процСс, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° трансформиранС Π½Π° някакъв ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π΄ΠΎ някакъв ΠΊΡ€Π°Π΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, Π΄ΠΎ някаква Ρ†Π΅Π». Π’ нашия случай ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ docker-compose Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΈ Π² абстрактни Ρ†Π΅Π»ΠΈ (Ѐалшиви Ρ†Π΅Π»ΠΈ).

Π”Π° ΠΊΠ°ΠΆΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° make Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ искамС ΠΎΡ‚ нСя, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Ρ„Π°ΠΉΠ» Makefile.

Π’ Π½Π°ΡˆΠ°Ρ‚Π° Makefile Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ docker ΠΈ docker-compose, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° сглобяванС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, стартиранС, спиранС, рСстартиранС, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Π»ΠΈΠ·Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΆΡƒΡ€Π½Π°Π»ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ случаи Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Docker Compose

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎ ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ° слСднитС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ:

  • TimescaleDB Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ (Postgres).
  • Express.js ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Ping (просто ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Π½ΠΈΡ‰ΠΎ спСциално).

Π’ΠΎΠ²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‰Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ 3 Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Ρ„Π°ΠΉΠ» docker-composeA, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ инструкции Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. ВсСки ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Ρ‰Π΅ ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° взаимодСйствиС. НапримСр с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ timescale Ρ‰Π΅ бъдС възмоТно Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Ρ‚ΠΎΠΉ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слСдното:

  • Π’Π»Π΅Π·Ρ‚Π΅ Π² ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Π½Π° Postgres.
  • Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈ Скспорт Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.
  • създаванС pg_dump Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈΠ»ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

Express.js ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π° прилоТСния, expressjs, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° слСднитС характСристики:

  • ИздаванС Π½Π° свСТи Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ систСмния ΠΆΡƒΡ€Π½Π°Π».
  • Π’Π»ΠΈΠ·Π°Π½Π΅ Π² shell Π·Π° изпълнСниС Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.

ВзаимодСйствиС с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

Π‘Π΅Π³Π°, слСд ΠΊΠ°Ρ‚ΠΎ настроихмС комуникация ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Docker Compose, Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠΈΡ€Π°ΠΌΠ΅ с Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π’ систСмата Docker Compose ΠΈΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° docker-compose, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΉΠΊΠΈ опцията -f, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»Π° Π² систСмата docker-compose.yml.

Използвайки Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π·ΠΈ опция, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ взаимодСйствиСто със систСмата само Π΄ΠΎ ΠΎΠ½Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са спомСнати във Ρ„Π°ΠΉΠ»Π° docker-compose.yml.

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ взаимодСйствията с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ docker-compose. Ако си прСдставим, Ρ‡Π΅ трябва Π΄Π° Π²Π»Π΅Π·Π΅ΠΌ Π² Ρ‡Π΅Ρ€ΡƒΠΏΠΊΠ°Ρ‚Π° psql, Ρ‚ΠΎΠ³Π°Π²Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ Ρ‚Π°ΠΊΠ°:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

Π‘ΡŠΡ‰Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, която Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° изпълнСниС docker-composeИ docker, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

docker exec -it  edp_timescale_1 psql -Upostgres

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π² Ρ‚Π°ΠΊΠΈΠ²Π° случаи Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π·Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π΄Π° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docker, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docker-compose, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° нСобходимостта ΠΎΡ‚ запомнянС Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

И Π΄Π²Π΅Ρ‚Π΅ Π³ΠΎΡ€Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π΅ са Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° слоТни. Но Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ "ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°" във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Makefile, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π½ΠΈ Π΄Π°Π΄Π΅ интСрфСйс ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° прости ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ сам Ρ‰Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° Ρ‚Π°ΠΊΠΈΠ²Π° дълги ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ постигнати ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

make db-shell

Ясно Π΅, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Makefile Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опростява Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ!

Π Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π’ΡŠΠ· основа Π½Π° Π³ΠΎΡ€Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Π° схСма Ρ‰Π΅ създадСм слСдния Ρ„Π°ΠΉΠ» docker-compose.yml:

version: '3.3'
services:
    api:
        build: .
        image: mywebimage:0.0.1
        ports:
            - 8080:8080
        volumes:
            - /app/node_modules/
        depends_on:
            - timescale
        command: npm run dev
        networks:
            - webappnetwork
    timescale:
        image: timescale/timescaledb-postgis:latest-pg11
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
        volumes:
          - ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
        networks:
           - webappnetwork
    ping:
       image: willfarrell/ping
       environment:
           HOSTNAME: "localhost"
           TIMEOUT: 300
networks:
   webappnetwork:
       driver: bridge

Π—Π° Π΄Π° управляватС конфигурацията Π½Π° Docker Compose ΠΈ Π΄Π° взаимодСйстватС с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ описва, Π½Π΅ΠΊΠ° създадСм слСдния Ρ„Π°ΠΉΠ» Makefile:

THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
        make -pRrq  -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
        docker-compose -f docker-compose.yml build $(c)
up:
        docker-compose -f docker-compose.yml up -d $(c)
start:
        docker-compose -f docker-compose.yml start $(c)
down:
        docker-compose -f docker-compose.yml down $(c)
destroy:
        docker-compose -f docker-compose.yml down -v $(c)
stop:
        docker-compose -f docker-compose.yml stop $(c)
restart:
        docker-compose -f docker-compose.yml stop $(c)
        docker-compose -f docker-compose.yml up -d $(c)
logs:
        docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
        docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
        docker-compose -f docker-compose.yml ps
login-timescale:
        docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
        docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
        docker-compose -f docker-compose.yml exec timescale psql -Upostgres

ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ описанитС Ρ‚ΡƒΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ сС отнасят Π·Π° всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° c= Π²ΠΈ позволява Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π΄ΠΎ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Π‘Π»Π΅Π΄ Makefile Π³ΠΎΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠ°:

  • make help - ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° списък с всички Π½Π°Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° make.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
ΠŸΠΎΠΌΠΎΡ‰ Π·Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ

  • make build - ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ Dockerfile. Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ изобраТСния timescale ΠΈ ping. Но ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ api искамС Π΄Π° строим Π½Π° мСстно Π½ΠΈΠ²ΠΎ. Π’ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС Π½Π°ΠΏΡ€Π°Π²ΠΈ слСд изпълнСниС Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

  • make start - стартирайтС всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π—Π° Π΄Π° стартиратС само Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°Ρ‚ΠΎ make start c=timescale.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
ИзпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° скала

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
ИзпълнСниС Π½Π° ping ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

  • make login-timescale - Π²Π»Π΅Π·Ρ‚Π΅ Π² bash сСсията Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° timescale.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
ИзпълнСниС Π½Π° bash Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° скала

  • make db-shell - Π²Ρ…ΠΎΠ΄ към psql Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ timescale Π·Π° изпълнСниС Π½Π° SQL заявки към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
ИзпълнСниС Π½Π° psql Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ timescaledb

  • make stop - спрСтС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
Π‘ΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° скала

  • make down - спиранС ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π—Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠ°Ρ‚ΠΎ посочитС ТСлания ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. НапримСр - make down c=timescale ΠΈΠ»ΠΈ make down c=api.

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile
Π‘ΠΏΡ€Π΅Ρ‚Π΅ ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠΉΡ‚Π΅ всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ систСмата Docker Compose Π½ΠΈ Π΄Π°Π²Π° Π±ΠΎΠ³Π°Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, понякога Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ стават дълги ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° запомнянС Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚.

Начин Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Makefile Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° установим Π±ΡŠΡ€Π·ΠΎ ΠΈ лСсно взаимодСйствиС с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΎΡ‚ Ρ„Π°ΠΉΠ» docker-compose.yml. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° слСдното:

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ взаимодСйства само с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, описани Π² docker-compose.yml, Π΄Ρ€ΡƒΠ³ΠΈ Ρ‚Π΅Ρ‡Π°Ρ‰ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π΅ ΠΏΡ€Π΅Ρ‡Π°Ρ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.
  • Π’ случай, Ρ‡Π΅ Π΄Π°Π΄Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ Π·Π°Π±Ρ€Π°Π²Π΅Π½Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° make help ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ ΠΏΠΎΠΌΠΎΡ‰ Π·Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
  • НС Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ дълги ΡΠΏΠΈΡΡŠΡ†ΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, Π·Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ записи Π² ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈΠ»ΠΈ Π²Π»ΠΈΠ·Π°Π½Π΅. НапримСр ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°Ρ‚ΠΎ docker-compose -f docker-compose.yml exec timescale psql -Upostgres сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° Π² make db-shell.
  • досиС Makefile ΠœΠΎΠΆΠ΅Ρ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ растС, Π΄Π° сС приспособяватС гъвкаво към Π½Π΅Π³ΠΎ. НапримСр, лСсно Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° към Π½Π΅Π³ΠΎ, Π·Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎ дСйствиС.
  • Ако голям Π΅ΠΊΠΈΠΏ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡŠΡ‰ΠΎΡ‚ΠΎ Makefile, Ρ‚ΠΎΠ²Π° Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΡΡŠΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΡ‚ΠΎ ΠΈ намалява Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅.

PS Π’ Π½Π°ΡˆΠ°Ρ‚Π° ΠΏΠ°Π·Π°Ρ€ ΠΈΠΌΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ сС инсталира с Π΅Π΄Π½ΠΎ ΠΊΠ»ΠΈΠΊΠ²Π°Π½Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ VPS. Всички Π½ΠΎΠ²ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ 3 Π΄Π½ΠΈ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ тСстванС.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Как Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Docker Compose?

Docker Compose: ΠžΠΏΡ€ΠΎΡΡ‚Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си с Makefile

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€