ΠΠ²ΡΠΎΡ ΡΡΠ°ΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ, Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΠΎΠ½Π° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠ΅Ρ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΠΎΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ Docker Compose ΠΈ ΠΈΠ΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Docker. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π·Π½Π°ΠΊΠΎΠΌ Ρ ΠΎΡΠ½ΠΎΠ²Π°ΠΌΠΈ Docker. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ β ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π°
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Docker Compose?
Docker Compose β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ, Π²Ρ ΠΎΠ΄ΡΡΠ΅Π΅ Π² ΡΠΎΡΡΠ°Π² Docker. ΠΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠ·ΡΡΠ°Ρ ΠΎΡΠ½ΠΎΠ²Ρ Docker, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎ, Π½Π΅ Π·Π°Π²ΠΈΡΡΡΠΈΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΎΡ Π½Π΅ΠΊΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΆΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΡΠ΅Π΄ΠΊΠΎΡΡΡ. Π Π΅Π°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΡΠ΅Π»ΡΠΉ Π½Π°Π±ΠΎΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π²Π°ΠΌ, ΠΏΡΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Docker Compose? ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ β ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. ΠΡΠ»ΠΈ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΡΠΎ Docker Compose ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°ΡΡ Π²Π΅Π±-ΡΠ°ΠΉΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ, Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² β ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΉΡΠ°, ΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Docker Compose, Π΅ΡΠ»ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π΅Ρ ΡΠΏΡΠΎΡΡΠ½Π½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Docker ΠΈ Docker Compose
Docker ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ (ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ), ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΡΠΎΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Docker Compose ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠΌΠΈ Π² ΡΠΎΡΡΠ°Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅ ΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΡΠΎ ΠΈ Docker, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ.
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-ΡΠ΅ΡΠ²Π΅ΡΠ°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
# ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ, ΡΡΠΎ 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
Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 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 Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ?
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com