ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ°ΡΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ Π² ΠΏΡΠ΅Π΄Π΄Π²Π΅ΡΠΈΠΈ ΡΡΠ°ΡΡΠ° ΠΊΡΡΡΠ°
Docker Compose β ΡΡΠΎ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ΅ΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ
ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡΡ ΡΠ΅ΡΠΊΠΎΠΌΡ ΠΈ ΠΏΡΠΎΡΡΠΎΠΌΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ Π²
ΡΠ°ΠΉΠ»Π°Ρ
Π‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ
ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ
ΠΠΎ Π·Π½Π°ΡΠΈΡ Π»ΠΈ ΡΡΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ docker-compose ΡΠ°ΠΉΠ» Π²
ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½ ΡΡΠ΅Π΄Π΅? ΠΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ» Π΄Π»Ρ
ΡΡΠ΅ΠΉΠ΄ΠΆΠΈΠ½Π³Π°? ΠΡ, Π² ΡΠ΅Π»ΠΎΠΌ β Π΄Π°, Π½ΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- ΠΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΡΠ΅Π΄Ρ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅Π΄Π΅. - ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ
Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ) docker-compose ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎ-ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ
ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ, ΠΈ docker compose ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡ ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΠΈ ΠΎΠ±ΠΎΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ².
Π Π°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π°
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Ρ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π·Π°Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π²
ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ, ΠΎΠ±ΡΡΠ½ΠΎ, ΡΠΎΠΌ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠ½ΡΠΈΡΡΠ΅ΡΡΡ Π²
ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π½ΡΠ°ΠΉΠΌ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½-ΡΡΠ΅Π΄Ρ
ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ.
Π ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ·Π»ΠΎΠ², Π° ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΏΠΎ
ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ·Π»Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ), ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ Π½Π΅
ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ
ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π°, ΡΠΈΠ³Π½Π°Π»Ρ ΠΈ Ρ. Π΄.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ, ΠΎΠ±ΡΡΠ½ΠΎ, Ρ
ΠΎΡΠΈΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π· Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ³ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ΅Π³ΠΎΠΌ (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅
Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° Π²Π°ΡΠ΅ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅).
ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
Π£ΡΠΈΡΡΠ²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΠΈ ΡΠΎ, ΡΡΠΎ Π²Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π°, ΡΡΠ½ΠΎ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
Docker compose ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
compose-ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ
ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
$ cat docker-compose.yml
version: "3.2"
services:
whale:
image: docker/whalesay
command: ["cowsay", "hello!"]
$ docker-compose up
Creating network "composeconfigs_default" with the default driver
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1 | ________
whale_1 | < hello! >
whale_1 | --------
whale_1 |
whale_1 |
whale_1 |
whale_1 | ## .
whale_1 | ## ## ## ==
whale_1 | ## ## ## ## ===
whale_1 | /""""""""""""""""___/ ===
whale_1 | ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
whale_1 | ______ o __/
whale_1 | __/
whale_1 | __________/
composeconfigs_whale_1 exited with code 0
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, docker compose ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
compose-
ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
$ cat docker-compose.second.yml
version: "3.2"
services:
whale:
command: ["cowsay", "bye!"]
$ docker-compose -f docker-compose.yml -f docker-compose.second.yml up
Creating composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1 | ______
whale_1 | < bye! >
whale_1 | ------
whale_1 |
whale_1 |
whale_1 |
whale_1 | ## .
whale_1 | ## ## ## ==
whale_1 | ## ## ## ## ===
whale_1 | /""""""""""""""""___/ ===
whale_1 | ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
whale_1 | ______ o __/
whale_1 | __/
whale_1 | __________/
composeconfigs_whale_1 exited with code 0
Π’Π°ΠΊΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π΅Π½ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ
ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·.
Π ΡΡΠ°ΡΡΡΡ, docker compose Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ
docker-compose.override.yml Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ docker-compose.yml. ΠΡΠ»ΠΈ
ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΠΉΠ», ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ mv docker-compose.second.yml docker-compose.override.yml
$ docker-compose up
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1 | ______
whale_1 | < bye! >
whale_1 | ------
whale_1 |
whale_1 |
whale_1 |
whale_1 | ## .
whale_1 | ## ## ## ==
whale_1 | ## ## ## ## ===
whale_1 | /""""""""""""""""___/ ===
whale_1 | ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
whale_1 | ______ o __/
whale_1 | __/
whale_1 | __________/
composeconfigs_whale_1 exited with code 0
Π₯ΠΎΡΠΎΡΠΎ, ΡΠ°ΠΊ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅.
ΠΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π€Π°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...
Π Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ docker-compose build (ΠΈΠ»ΠΈ push) Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
$MY_SERVICE_VERSION, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ latest, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ ΡΠ±ΠΎΡΠΊΠΈ, ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡΡΠ΅
Π² ΡΠ΅Π³ΠΈΡΡΡ private.registry.mine.
ΠΠΎΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ
ΠΠΎΠ΄Ρ
ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄ΠΎΠ±Π½Ρ Π΄Π»Ρ ΠΌΠ΅Π½Ρ, ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ ΠΈ Π²Π°ΠΌ. Π― ΡΠ»Π΅Π΄ΡΡ ΡΡΠΈΠΌ
ΠΏΡΠΎΡΡΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ:
- ΠΡΠ΅ ΠΌΠΎΠΈ ΡΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΡΡΠ΅Π΄) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π·
ΡΠ°ΠΉΠ»Ρ docker-compose. - Π€Π°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΎΡ
Π²Π°ΡΠ° Π²ΡΠ΅Ρ
ΠΌΠΎΠΈΡ
ΡΡΠ΅Π΄, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ
ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. - ΠΠ½Π΅ Π½ΡΠΆΠ½Π° ΠΎΠ΄Π½Π° ΠΏΡΠΎΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
- ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ docker-compose.yml.
- ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΎΠ² ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡ ΡΡΠ΅Π΄Ρ ΠΊ ΡΡΠ΅Π΄Π΅ (ΡΡΠ΅ΠΉΠ΄ΠΆΠΈΠ½Π³, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ,
ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½). - ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ
ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΈΡΠΊΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠ΅ΠΊΠ° Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ Π±Π΅Π·
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½-ΡΡΠ΅Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° docker stack deploy β compose-file docker-compose.yml —with-registry-auth my-stack-name.
- Π Π°Π±ΠΎΡΠ΅Π΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ docker-compose up -d.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
# docker-compose.yml
...
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
environment:
API_ENDPOINT: ${API_ENDPOINT:-https://production.my-api.com}
...
Π
# docker-compose.override.yml
...
services:
my-service:
ports: # This is needed for development!
- 80:80
environment:
API_ENDPOINT: https://devel.my-api.com
volumes:
- ./:/project/src
...
Π― ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ docker-compose (docker-compose up), ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠ΅ΠΊ Π²
ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π² /project/src.
Π― ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΆΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅! Π Ρ ΠΌΠΎΠ³ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠ½ΠΎ
ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΉΠ» docker-compose.yml Π΄Π»Ρ ΡΡΠ΅ΠΉΠ΄ΠΆΠΈΠ½Π³Π°. Π§ΡΠΎΠ±Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΡΠΎ Π½Π°
ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½, ΠΌΠ½Π΅ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°Π· Ρ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠ΅Π³ΠΎΠΌ
Π½Π° ΡΡΠ°ΠΏΠ΅ CI:
export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push
ΠΠ° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄:
export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
Π Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π½Π° ΡΡΠ΅ΠΉΠ΄ΠΆΠ΅, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠ΅Π΄Π΅ ΡΡΠ΅ΠΉΠ΄ΠΆΠΈΠ½Π³Π°:
export MY_SERVICE_VERSION=1.2.3
export API_ENDPOINT=http://staging.my-api.com
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π²Π° ΡΠ°Π·Π½ΡΡ
docker-compose ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π΅Π·
Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ Π²Π°ΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ!
Π£Π·Π½Π°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΊΡΡΡΠ΅
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com