Руководство ΠΏΠΎ Docker Compose для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Автор ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ сСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ‚Π΅Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Docker Compose ΠΈ ΠΈΠ΄ΡƒΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ своё ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с использованиСм Docker. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ этого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π·Π½Π°ΠΊΠΎΠΌ с основами Docker. Если это Π½Π΅ Ρ‚Π°ΠΊ β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° эту ΡΠ΅Ρ€ΠΈΡŽ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², Π½Π° эту ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Π³Π΄Π΅ основы Docker рассмотрСны вмСстС с основами Kubernetes, ΠΈ Π½Π° эту ΡΡ‚Π°Ρ‚ΡŒΡŽ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ….

Руководство ΠΏΠΎ Docker Compose для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Docker Compose?

Docker Compose β€” это ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ срСдство, входящСС Π² состав Docker. Оно ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡, связанных с Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

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

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

ВСхнология Docker Compose, Ссли ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‘ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎ, позволяСт, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ мноТСство сСрвисов.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Docker ΠΈ Docker Compose

Docker примСняСтся для управлСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (сСрвисами), ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Docker Compose ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ управлСния нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, входящими Π² состав прилоТСния. Π­Ρ‚ΠΎΡ‚ инструмСнт ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ возмоТности, Ρ‡Ρ‚ΠΎ ΠΈ Docker, Π½ΠΎ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ слоТными прилоТСниями.

Руководство ΠΏΠΎ Docker Compose для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…
Docker (ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€) ΠΈ Docker Compose (нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²)

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ сцСнарий использования Docker Compose

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

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Π²Π΅Π±-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Π²Π° Π²Π΅Π±-сайта. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ позволяСт людям, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌΡΡ бизнСсом, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, всСго Π² нСсколько Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ² ΠΌΡ‹ΡˆΡŒΡŽ, ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΈ Π΄Π²Π° сайта Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°Ρˆ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ становится всё популярнСС, ΠΈ оказываСтся, Ρ‡Ρ‚ΠΎ мощности сСрвСра, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΡƒΠΆΠ΅ нСдостаточно. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ пСрСвСсти вСсь ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ.

К соТалСнию, Π½Π΅Ρ‡Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Docker Compose Π²Ρ‹ Π½Π΅ использовали. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ придётся ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ сСрвисы ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, надСясь Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹, Π² процСссС этой Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅.

Если ΠΆΠ΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Docker Compose, Ρ‚ΠΎ пСрСнос вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ сСрвСр β€” это вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ пСрСнос ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Π½ΠΎΠ²ΠΎΠ΅ мСсто, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ лишь Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ настройки ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ сСрвСр Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного прилоТСния с использованиСм Docker Compose

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, для Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Docker Compose, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ вашС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с использованиСм этого инструмСнта. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ нСбольшого Π²Π΅Π±-сайта (сСрвСра) Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ тСкста. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Ρƒ сСрвСра Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΊΠ»ΠΈΠ΅Π½Ρ‚), Ρ‚ΠΎΠΆΠ΅ написанная Π½Π° Python. ПослС получСния Ρ„Π°ΠΉΠ»Π° с сСрвСра ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ тСкст, хранящийся Π² Π½Ρ‘ΠΌ, Π½Π° экран.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассчитываСм Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Π»Π°Π΄Π΅Π΅Ρ‚Π΅ основами Docker, ΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ установлСна ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Docker.

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

▍1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ вашС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π½Π°Ρ‡Π°Ρ‚ΡŒ с создания ΠΏΠ°ΠΏΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Она Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ:

  • Π€Π°ΠΉΠ» docker-compose.yml. Π­Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Docker Compose, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ инструкции, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для запуска ΠΈ настройки сСрвисов.
  • Папка server. Она Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для обСспСчСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСра.
  • Папка client. Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ„Π°ΠΉΠ»Ρ‹ клиСнтского прилоТСния.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ содСрТимоС Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

.
β”œβ”€β”€ client/
β”œβ”€β”€ docker-compose.yml
└── server/
2 directories, 1 file

▍2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСрвСра

Π’ΡƒΡ‚ ΠΌΡ‹, Π² процСссС создания сСрвСра, Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Docker.

2a. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ server ΠΈ создайтС Π² Π½Π΅ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹:

  • Π€Π°ΠΉΠ» server.py. Π’ Π½Ρ‘ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ сСрвСра.
  • Π€Π°ΠΉΠ» index.html. Π’ этом Ρ„Π°ΠΉΠ»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ вывСсти клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Π€Π°ΠΉΠ» Dockerfile. Π­Ρ‚ΠΎ β€” Ρ„Π°ΠΉΠ» Docker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ инструкции, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для создания окруТСния сСрвСра.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ содСрТимоС вашСй ΠΏΠ°ΠΏΠΊΠΈ server/:

.
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ index.html
└── server.py
0 directories, 3 files

2b. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python-Ρ„Π°ΠΉΠ»Π°.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² Ρ„Π°ΠΉΠ» server.py ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

#!/usr/bin/env python3

# Π˜ΠΌΠΏΠΎΡ€Ρ‚ систСмных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ python.
# Π­Ρ‚ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания Π²Π΅Π±-сСрвСра.
# Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ особСнноС, эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ вмСстС с Python.

import http.server
import socketserver

# Π­Ρ‚Π° пСрСмСнная Π½ΡƒΠΆΠ½Π° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру.

handler = http.server.SimpleHTTPRequestHandler

# Π’ΡƒΡ‚ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сСрвСр ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° ΠΏΠΎΡ€Ρ‚Π΅ 1234. 
# ΠŸΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ эти свСдСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ пригодятся Π² дальнСйшСм, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с docker-compose.

with socketserver.TCPServer(("", 1234), handler) as httpd:

 Β Β Β # Благодаря этой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ постоянно, оТидая запросов ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

 Β Β httpd.serve_forever()

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой Π²Π΅Π±-сСрвСр. Он Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Ρ„Π°ΠΉΠ» index.html, содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π΅Π±-страницС.

2c. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ HTML-Ρ„Π°ΠΉΠ»Π°

Π’ Ρ„Π°ΠΉΠ» index.html Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ тСкст:

Docker-Compose is magic!

Π­Ρ‚ΠΎΡ‚ тСкст Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

2d. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Dockerfile

БСйчас ΠΌΡ‹ создадим простой Ρ„Π°ΠΉΠ» Dockerfile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ срСды выполнСния для Python-сСрвСра. Π’ качСствС основы создаваСмого ΠΎΠ±Ρ€Π°Π·Π° Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Python. Π’ΠΎΡ‚ содСрТимоС Dockerfile:

# На всякий случай напоминаю, Ρ‡Ρ‚ΠΎ Dockerfile всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°.
# Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово 'FROM'.
# Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· python (с DockerHub).
# Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹, Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ€Π°Π·Π°, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ 'python', Π° Π² качСствС вСрсии - 'latest'.

FROM python:latest

# Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΊΠΎΠ΄, написанный Π½Π° Python, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ 'server.py' ΠΈ 'index.html'.
# Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово 'ADD'.
# ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, 'server.py', прСдставляСт собой имя Ρ„Π°ΠΉΠ»Π°, хранящСгося Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.
# Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, '/server/', это ΠΏΡƒΡ‚ΡŒ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² ΠΎΠ±Ρ€Π°Π·Π΅.
# Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΎΠ±Ρ€Π°Π·Π° '/server/'.

ADD server.py /server/
ADD index.html /server/

# Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ 'WORKDIR', Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎΠ²ΠΎΠΉ для вас.
# Она позволяСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π°.
# Π’ качСствС Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΌΡ‹ устанавливаСм '/server/'.

WORKDIR /server/

Π’Π΅ΠΏΠ΅Ρ€ΡŒ займёмся Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π½Π°Π΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

▍3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Боздавая ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΌΡ‹ ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ вспомним Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основы Docker.

3a. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° client ΠΈ создайтС Π² Π½Π΅ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹:

  • Π€Π°ΠΉΠ» client.py. Π’ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.
  • Π€Π°ΠΉΠ» Dockerfile. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ Ρ€ΠΎΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅ сСрвСра. А ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΎΠ½ содСрТит ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ созданиС срСды для выполнСния клиСнтского ΠΊΠΎΠ΄Π°.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ваша ΠΏΠ°ΠΏΠΊΠ° client/ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

.
β”œβ”€β”€ client.py
└── Dockerfile
0 directories, 2 files

3b. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python-Ρ„Π°ΠΉΠ»Π°

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² Ρ„Π°ΠΉΠ» client.py ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

#!/usr/bin/env python3

# Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Python.
# Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° 'index.html' с сСрвСра.
# НичСго особСнного ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° устанавливаСтся вмСстС с Python.

import urllib.request

# Π­Ρ‚Π° пСрСмСнная содСрТит запрос ΠΊ 'http://localhost:1234/'.
# Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, сСйчас Π²Ρ‹ Π·Π°Π΄Π°Ρ‘Ρ‚Π΅ΡΡŒ вопросом ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ 'http://localhost:1234'.
# localhost ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ сСрвСром.
# 1234 - это Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΎΡΡŒ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ настройкС сСрвСрного ΠΊΠΎΠ΄Π°.

fp = urllib.request.urlopen("http://localhost:1234/")

# 'encodedContent' соотвСтствуСт Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΎΡ‚Π²Π΅Ρ‚Ρƒ сСрвСра ('index.html').
# 'decodedContent' соотвСтствуСт раскодированному ΠΎΡ‚Π²Π΅Ρ‚Ρƒ сСрвСра (Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ вывСсти Π½Π° экран).

encodedContent = fp.read()
decodedContent = encodedContent.decode("utf8")

# Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ содСрТимоС Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ с сСрвСра ('index.html').

print(decodedContent)

# Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС с сСрвСром.

fp.close()

Благодаря этому ΠΊΠΎΠ΄Ρƒ клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с сСрвСра ΠΈ вывСсти ΠΈΡ… Π½Π° экран.

3c. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Dockerfile

Как ΠΈ Π² случаС с сСрвСром, ΠΌΡ‹ создаём для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° простой Dockerfile, отвСтствСнный Π·Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ срСды, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ клиСнтскоС Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΡ‚ ΠΊΠΎΠ΄ клиСнтского Dockerfile:

# Π’ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π² сСрвСрном Dockerfile.

FROM python:latest

# Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ 'client.py' Π² ΠΏΠ°ΠΏΠΊΡƒ '/client/'.

ADD client.py /client/

# УстанавливаСм Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ '/client/'.

WORKDIR /client/

▍4. Docker Compose

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, ΠΌΡ‹ создали Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: сСрвСр ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… имССтся собствСнный Ρ„Π°ΠΉΠ» Dockerfile. Π”ΠΎ сих ΠΏΠΎΡ€ всё происходящСС Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ основ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Docker. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅ ΠΌΡ‹ приступаСм ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с Docker Compose. Для этого обратимся ΠΊ Ρ„Π°ΠΉΠ»Ρƒ docker-compose.yml, располоТСнному Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΌΡ‹ Π½Π΅ стрСмимся Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² docker-compose.yml. Наша главная Ρ†Π΅Π»ΡŒ β€” Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π°ΡŽΡ‰ΠΈΠΉ Π²Π°ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ знания ΠΏΠΎ Docker Compose.

Π’ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» docker-compose.yml:

# Π€Π°ΠΉΠ» docker-compose Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅Π³Π° вСрсии.
# ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ "3" Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это - самая свСТая вСрсия Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого ΠΊΠΎΠ΄Π°.

version: "3"

# Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ docker-composes Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с сСрвисами.
# 1 сСрвис = 1 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.
# БСрвисом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, сСрвСр, сСрвСр Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…...
# Π Π°Π·Π΄Π΅Π», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ описаны сСрвисы, начинаСтся с 'services'.

services:

 Β # Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, ΠΌΡ‹ собираСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ клиСнтскоС ΠΈ сСрвСрноС прилоТСния.
 Β # Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄Π²Π° сСрвиса.
 Β # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ сСрвис (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€): сСрвСр.
 Β # ΠΠ°Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ.
 Β # ΠŸΠΎΠ½ΡΡ‚Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ сСрвиса ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€ΠΎΠ»ΡŒ.
 Β # Π—Π΄Π΅ΡΡŒ ΠΌΡ‹, для имСнования ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ сСрвиса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово 'server'.

 Β server:
 
 Β Β Β # ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово "build" позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ
 Β Β Β # ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Dockerfile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΎΠ±Ρ€Π°Π·Π°,
 Β Β Β # ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСрвис.
 Β Β Β # Π—Π΄Π΅ΡΡŒ 'server/' соотвСтствуСт ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ сСрвСра,
 Β Β Β # которая содСрТит ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Dockerfile.

 Β Β Β build: server/

 Β Β Β # Команда, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ послС создания ΠΎΠ±Ρ€Π°Π·Π°.
 Β Β Β # Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ запуск "python ./server.py".

 Β Β Β command: python ./server.py

 Β Β Β # ВспомнитС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² качСствС ΠΏΠΎΡ€Ρ‚Π° Π² 'server/server.py' ΡƒΠΊΠ°Π·Π°Π½ ΠΏΠΎΡ€Ρ‚ 1234.
 Β Β Β # Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ сСрвСру с нашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°),
 Β Β Β # ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ этого ΠΏΠΎΡ€Ρ‚Π° Π½Π° ΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.
 Β Β Β # Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово 'ports'.
 Β Β Β # ΠŸΡ€ΠΈ Π΅Π³ΠΎ использовании примСняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ конструкция: [ΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°]:[ΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°]
 Β Β Β # Π’ нашСм случаС Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° 1234 ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ связь с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ
 Β Β Β # 1234 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° этот ΠΏΠΎΡ€Ρ‚ сСрвСр 
 Β Β Β # ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ поступлСния запросов).

 Β Β Β ports:
 Β Β Β Β Β - 1234:1234

 Β # Π’Ρ‚ΠΎΡ€ΠΎΠΉ сСрвис (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€): ΠΊΠ»ΠΈΠ΅Π½Ρ‚.
 Β # Π­Ρ‚ΠΎΡ‚ сСрвис Π½Π°Π·Π²Π°Π½ 'client'.

 Β client:
 Β Β Β # Π—Π΄Π΅ΡΡŒ 'client/ соотвСтствуСт ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅, которая содСрТит
 Β Β Β # Ρ„Π°ΠΉΠ» Dockerfile для клиСнтской части систСмы.

 Β Β Β build: client/

 Β Β Β # Команда, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ послС создания ΠΎΠ±Ρ€Π°Π·Π°.
 Β Β Β # Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ запуск "python ./client.py".
 
 Β Β Β command: python ./client.py

 Β Β Β # ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово 'network_mode' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для описания Ρ‚ΠΈΠΏΠ° сСти.
 Β Β Β # Π’ΡƒΡ‚ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ 'localhost' ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

 Β Β Β network_mode: host

 Β Β Β # ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово 'depends_on' позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ сСрвис,
 Β Β Β # ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сСрвисы.
 Β Β Β # Нам Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сСрвис 'client' доТдался Π±Ρ‹ готовности ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ сСрвиса 'server'.
 
 Β Β Β depends_on:
 Β Β Β Β Β - server

▍5. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² docker-compose.yml внСсСны всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструкции, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ шаг нашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ использованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker build, Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ нСскольким сСрвисам:

$ docker-compose build

▍6. Запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ собран, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ шаг нашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ соотвСтствуСт ΡˆΠ°Π³Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, выполняСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° docker run:

$ docker-compose up

ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ тСкст, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ с сСрвСра: Docker-Compose is magic!.

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° 1234 для обслуТивания запросов ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎ адрСсу http://localhost:1234/, Π² Π½Ρ‘ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° страница с тСкстом Docker-Compose is magic!.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Docker Compose.

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° позволяСт ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы, созданныС ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ docker-compose up:

$ docker-compose down

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ сСрвисов:

$ docker-compose logs -f [service name]

НапримСр, Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅: $ docker-compose logs -f [service name].

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ вывСсти список ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²:

$ docker-compose ps

Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅:

$ docker-compose exec [service name] [command]

НапримСр, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: docker-compose exec server ls.

Вакая ΠΊΠΎΠΌΠ°Π½Π΄Π° позволяСт вывСсти список ΠΎΠ±Ρ€Π°Π·ΠΎΠ²:

$ docker-compose images

Π˜Ρ‚ΠΎΠ³ΠΈ

ΠœΡ‹ рассмотрСли основы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Docker Compose, Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΈ, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ, ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π΅Ρ‘ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΌΡƒ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ. Π’ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ здСсь рассматривали.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! ΠŸΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ Docker Compose Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…?

Руководство ΠΏΠΎ Docker Compose для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

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