Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile

ΠšΠ°ΠΆΠ΄Ρ‹Π΅ нСсколько Π»Π΅Ρ‚ Π² индустрии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО происходит смСна ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… явлСний ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ рост интСрСса ΠΊ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ микросСрвисов. Π₯отя микросСрвисы β€” это тСхнология Π½Π΅ самая новая, лишь Π² послСднСС врСмя Π΅Ρ‘ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π²Π·Π»Π΅Ρ‚Π΅Π»Π° Π΄ΠΎ нСбСс.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹Π΅ сСрвисы Π² наши Π΄Π½ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ нСзависимыми Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌΠΈ микросСрвисами. ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слуТит СдинствСнной ΠΈ ΠΎΡ‡Π΅Π½ΡŒ спСцифичСской Ρ†Π΅Π»ΠΈ. НапримСр β€” это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ рСляционная Π‘Π£Π‘Π”, Express-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Solr-сСрвис.

Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile

Π’ наши Π΄Π½ΠΈ слоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмы Π±Π΅Π· примСнСния микросСрвисов. А эта ситуация, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²Π΅Π΄Ρ‘Ρ‚ нас ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Docker.

Docker

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

Docker Compose

ВСхнология Docker Compose ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для конфигурирования ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Docker Compose-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker, сколько Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŽ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Docker Compose для настройки сСрвисов прилоТСния ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡ… взаимодСйствия Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ YAML-Ρ„Π°ΠΉΠ». Docker Compose, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это инструмСнт для описания ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Docker.

Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile
Π”Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° хост-систСмС

GNU Make

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

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ make ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ ΠΎΡ‚ Π½Π΅Ρ‘ Ρ…ΠΎΡ‚ΠΈΠΌ, Π½Π°ΠΌ понадобится Ρ„Π°ΠΉΠ» Makefile.

Π’ нашСм Makefile Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker ΠΈ docker-compose, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ мноТСства Π·Π°Π΄Π°Ρ‡. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ сборкС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΎ Π΅Π³ΠΎ запускС, остановкС, пСрСзапускС, ΠΎΠ± ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π»ΠΎΠ³Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования Docker Compose

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… TimescaleDB (Postgres).
  • Express.js-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Ping (просто ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΉ).

Π­Ρ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ понадобится 3 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Docker ΠΈ Ρ„Π°ΠΉΠ» docker-compose, содСрТащий инструкции ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ этими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ взаимодСйствия. НапримСр, с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ timescale ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. А ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΎΠ½ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

  • Π’Ρ…ΠΎΠ΄ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Postgres.
  • Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈ экспорт Ρ‚Π°Π±Π»ΠΈΡ†.
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ pg_dump Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Express.js-прилоТСния, expressjs, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ возмоТностями:

  • Π’Ρ‹Π΄Π°Ρ‡Π° свСТих Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· систСмного ΠΆΡƒΡ€Π½Π°Π»Π°.
  • Π’Ρ…ΠΎΠ΄ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ для выполнСния Π½Π΅ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄.

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

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ настроили связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ с использованиСм 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
Запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° timescale

Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile
Запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ping

  • make login-timescale β€” Π²Ρ…ΠΎΠ΄ Π² bash-сСссию ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° timescale.

Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile
Запуск bash Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ timescale

  • make db-shell β€” Π²Ρ…ΠΎΠ΄ Π² psql Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ timescale для выполнСния SQL-запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile
Запуск psql Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ timescaledb

  • make stop β€” остановка ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile
ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° timescale

  • 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, это упорядочиваСт ΡΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ сниТаСт количСство ошибок.

P.S. Π’ нашСм маркСтплСйсС имССтся ΠΎΠ±Ρ€Π°Π· Docker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π° VPS. ВсСм Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ бСсплатно ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ 3 дня для тСстирования.

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

Docker Compose: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с использованиСм Makefile

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ