Docker Compose: ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ транскрипции подкаста ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Π² ΠΏΡ€Π΅Π΄Π΄Π²Π΅Ρ€ΠΈΠΈ старта курса «Администратор LinuxΒ»

Docker Compose: ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°

Docker Compose β€” это ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для создания Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ
окруТСния для стСка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Он позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ
ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ вашСго прилоТСния, слСдуя Ρ‡Π΅Ρ‚ΠΊΠΎΠΌΡƒ ΠΈ простому синтаксису Π² YAML-
Ρ„Π°ΠΉΠ»Π°Ρ…
.

Π‘ появлСниСм docker compose v3 эти YAML-Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСдС, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с
кластСром Docker Swarm.

Но Π·Π½Π°Ρ‡ΠΈΡ‚ Π»ΠΈ это, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ 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 Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π΅Π·
дублирования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для любой вашСй срСды!

Π£Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ курсС «Администратор LinuxΒ»

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