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

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

Π—Π° Π΄Π° ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ искамС ΠΎΡ‚ нСя, Ρ‰Π΅ Π½ΠΈ трябва Ρ„Π°ΠΉΠ» Makefile.

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

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Docker Compose

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

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

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

  • Π’Π»ΠΈΠ·Π°Π½Π΅ Π² ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Π½Π° Postgres.
  • Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈ Скспорт Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.
  • само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ изисква извСстни Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ усилия ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми ΠΈ Ρ‚ΡƒΠΊ Π½Π° сцСната ΠΈΠ·Π»ΠΈΠ·Π° VFS. Linux изисква Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² 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 β€” ΠΏΠΎΠΊΠ°Π·Π²Π° списък Π½Π° всички ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π·Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster