ΠΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠ°ΡΡΠ° ΠΏΡΠΈΠΏΡΠ΅ΠΌΡΠ΅Π½ Ρ ΠΈΡΡΠ΅ΠΊΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠ΅ΡΠΊΠ° ΠΊΡΡΡΠ°
ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅ ΡΠ΅ Π½Π΅Π²Π΅ΡΠΎΠ²Π°ΡΠ°Π½ Π°Π»Π°Ρ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ°Π΄Π½ΠΎΠ³
ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ Π·Π° ΡΡΠ΅ΠΊ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Ρ Π²Π°ΡΠΎΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ. ΠΠΌΠΎΠ³ΡΡΠ°Π²Π° Π²Π°ΠΌ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ΅ΡΠ΅
ΡΠ²Π°ΠΊΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, ΠΏΡΠ°ΡΠ΅ΡΠΈ ΡΠ°ΡΠ½Ρ ΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΡ Ρ
ΡΠ°ΡΠ»ΠΎΠ²ΠΈ
Π‘Π° ΠΏΠΎΡΠ°Π²ΠΎΠΌ
ΠΊΠ»Π°ΡΡΠ΅Ρ
ΠΠ»ΠΈ Π΄Π° Π»ΠΈ ΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΈΡΡΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅ Ρ
ΡΠ°Π·Π²ΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅ΡΡ? ΠΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΈΡΡΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ Π·Π°
ΠΈΠ½ΡΡΠ΅Π½Π°ΡΠΈΡΠ°? ΠΠ°, Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ, Π΄Π°, Π°Π»ΠΈ Π·Π° ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½Π°ΠΌ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ»Π΅Π΄Π΅ΡΠ΅:
- ΠΠ½ΡΠ΅ΡΠΏΠΎΠ»Π°ΡΠΈΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΈΡ
: ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΈΡ
ΠΎΠΊΡΡΠΆΠ΅ΡΠ° Π·Π° Π½Π΅ΠΊΠ΅
Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΌΠ΅ΡΠ°ΡΡ Ρ ΡΠ²Π°ΠΊΠΎΡ ΡΡΠ΅Π΄ΠΈΠ½ΠΈ. - ΠΠ°ΠΌΠ΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅: ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ° ΡΠ΅ΠΊΡΠ½Π΄Π΅ (ΠΈΠ»ΠΈ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅
ΡΠΎΡ ΡΠ΅Π΄Π°Π½ ΡΠ»Π΅Π΄Π΅ΡΠΈ) Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅ ΡΠ°ΡΠ» ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ Π½Π΅ΡΡΠΎ Ρ Π²Π΅Π·ΠΈ
ΠΏΡΠ²ΠΎ, Π° Π΄ΠΎΡΠΊΠ΅Ρ ΡΠΎΠΌΠΏΠΎΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ±ΡΠΈΠ½ΡΡΠΈ Π·Π° ΡΠΏΠ°ΡΠ°ΡΠ΅ ΠΎΠ±Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅.
Π Π°Π·Π»ΠΈΠΊΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ°Π·Π²ΠΎΡΠ½ΠΈΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°
Π’ΠΎΠΊΠΎΠΌ ΡΠ°Π·Π²ΠΎΡΠ°, Π½Π°ΡΠ²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅ ΠΆΠ΅Π»Π΅ΡΠΈ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ΄Π°
ΡΠ΅Π°Π»Π½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Ρ. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ, ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ Ρ ΡΠ΅Π³Π° ΠΌΠΎΠ½ΡΠΈΡΠ° Π²ΠΎΠ»ΡΠΌΠ΅Π½ ΡΠ° ΠΈΠ·Π²ΠΎΡΠ½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ
ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΊΠΎΡΠΈ ΡΠ°Π΄ΡΠΆΠΈ Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ·Π²ΠΎΡΠ΅ΡΠ° Π·Π° Π²Π°ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ. ΠΠ»ΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅
ΠΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ Π½ΠΈΡΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Π°Π½.
Π£ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ ΠΈΠΌΠ°ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ²ΠΎΡΠΎΠ²Π°, Π° Π·Π°ΠΏΡΠ΅ΠΌΠΈΠ½Π° ΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½Π°
Ρ ΠΎΠ΄Π½ΠΎΡΡ Π½Π° ΡΠ²ΠΎΡ Π½Π° ΠΊΠΎΠΌΠ΅ ΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ (ΠΈΠ»ΠΈ ΡΡΠ»ΡΠ³Π°), ΡΠ°ΠΊΠΎ Π΄Π° Π½Π΅ ΡΠ°Π΄ΠΈΡΠ΅
ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠΈ ΠΈΠ·Π²ΠΎΡΠ½ΠΈ ΠΊΠΎΠ΄ Π±Π΅Π· ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ΅ ΡΠΊΡΡΡΡΡΡ
ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡΠ° ΠΊΠΎΠ΄Π°, ΡΠΈΠ³Π½Π°Π»ΠΈ ΠΈΡΠ΄.
Π£ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³Π°, ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΡΠ»ΠΈΠΊΡ ΡΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΎΠΌ Π²Π΅ΡΠ·ΠΈΡΠΎΠΌ Π²Π°ΡΠ΅Π³ ΠΊΠΎΠ΄Π°.
Π£ΠΎΠ±ΠΈΡΠ°ΡΠ΅Π½ΠΎ ΡΠ΅ Π΄Π° Π³Π° ΠΎΠ·Π½Π°ΡΠΈΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠΎΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌ (ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠΊΠΈ
Π²Π΅ΡΠ·ΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎ Π²Π°ΡΠ΅ΠΌ Π½Π°Ρ
ΠΎΡΠ΅ΡΡ).
Π¦ΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ ΠΠ²Π΅ΡΡΠΈΠ΄Π΅
Π‘ ΠΎΠ±Π·ΠΈΡΠΎΠΌ Π½Π° ΡΠ°Π·Π»ΠΈΠΊΠ΅ ΠΈ Π΄Π° ΡΠ΅ Π²Π°ΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³Ρ ΡΠ°Π·Π»ΠΈΠΊΠΎΠ²Π°ΡΠΈ Ρ ΡΡΠ΅Π½Π°ΡΠΈΡΠΈΠΌΠ°
ΡΠ°Π·Π²ΠΎΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠ°, ΡΠ°ΡΠ½ΠΎ ΡΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΌ ΡΡΠ΅Π±Π°ΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅.
ΠΠΎΡΠΊΠ΅Ρ ΡΠΎΠΌΠΏΠΎΡΠ΅ ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π° ΡΠΏΠ°ΡΠ°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ
Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠ°ΡΡΠ°Π²ΡΠ°ΡΠ΅
Π΄ΠΎΠ±ΠΈΡΠΈ ΠΊΠΎΠ½Π°ΡΠ½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ. ΠΠ°ΠΊΠΎ ΠΎΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΡ:
$ 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
ΠΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΎ, Π΄ΠΎΡΠΊΠ΅Ρ ΡΠΎΠΌΠΏΠΎΡΠ΅ ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΎΠ²Π°ΡΠ΅ Π²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡΠ° -
Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅, ΠΎΠ²ΠΎ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ Ρ Π΄ΡΡΠ³ΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ:
$ 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
ΠΠ²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠ° Π½ΠΈΡΠ΅ Π±Π°Ρ Π·Π³ΠΎΠ΄Π½Π° ΡΠΎΠΊΠΎΠΌ ΡΠ°Π·Π²ΠΎΡΠ°, ΠΊΠ°Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°
ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ°Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠ°.
Π‘ΡΠ΅ΡΠΎΠΌ, Π΄ΠΎΡΠΊΠ΅Ρ ΡΠΎΠΌΠΏΠΎΡΠ΅ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΡΠ°ΠΆΠΈ ΠΏΠΎΡΠ΅Π±Π½Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·ΠΈΠ²ΠΎΠΌ
Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅.ΠΎΠ²Π΅ΡΡΠΈΠ΄Π΅.ΠΈΠΌΠ» Π΄Π° Π½Π°Π΄ΡΠ°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅.ΠΈΠΌΠ». ΠΠΊΠΎ
ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΡΡΠ΅ Π΄ΡΡΠ³Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ, Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ ΠΈΡΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΡΠ°ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ 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.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
...
ΡΠ° ΠΌΠΎΠ³Ρ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅ (Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅ ΡΠΏ)Π·Π° ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΡΡΠ΅ΠΊΠ°
ΡΠ°Π·Π²ΠΎΡΠ½ΠΈ ΡΠ΅ΠΆΠΈΠΌ ΡΠ° ΡΠ³ΡΠ°ΡΠ΅Π½ΠΈΠΌ ΠΈΠ·Π²ΠΎΡΠ½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ /ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ/ΡΡΡ.
ΠΠΎΠ³Ρ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌ ΠΎΠ²Π΅ ΠΈΡΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΠΈ! Π Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠ²Π½ΠΎ Π±ΠΈΡ
ΠΌΠΎΠ³Π°ΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌ
ΠΈΡΡΠΈ ΡΠ°ΡΠ» Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅.ΠΈΠΌΠ» Π·Π° ΠΈΠ½ΡΡΠ΅Π½Π°ΡΠΈΡΡ. ΠΠ° ΠΏΡΠΎΡΠΈΡΠΈΠΌ ΠΎΠ²ΠΎ Π½Π°
ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡ, ΡΠ°ΠΌΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΈ ΠΏΠΎΡΠ°ΡΠ΅ΠΌ ΡΠ»ΠΈΠΊΡ ΡΠ° ΡΠ½Π°ΠΏΡΠ΅Π΄ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌ
Ρ ΡΠ°Π·ΠΈ Π¦Π:
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
ΠΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ³Π°, ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ ΡΠΌΠΎ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Π·Π° Π΄ΠΎΡΠΊΠ΅Ρ-ΡΠΎΠΌΠΏΠΎΡΠ΅, ΠΊΠΎΡΠ΅ Π±Π΅Π·
ΠΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π·Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠ΅ ΠΈΠΌΠ°ΡΠ΅!
Π‘Π°Π·Π½Π°ΡΡΠ΅ Π²ΠΈΡΠ΅ ΠΎ ΠΊΡΡΡΡ
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ