Docker Compose: ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄ΠΎ производство

ΠŸΡ€Π΅Π²ΠΎΠ΄ Π½Π° транскрипцията Π½Π° подкаста, ΠΈΠ·Π³ΠΎΡ‚Π²Π΅Π½ Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° курса β€žLinux Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€β€œ

Docker Compose: ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄ΠΎ производство

Docker Compose Π΅ нСвСроятСн инструмСнт Π·Π° създаванС Π½Π° дСсктоп
срСда Π·Π° стСка, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ във Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Позволява Π²ΠΈ Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅
всСки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, слСдвайки ясСн ΠΈ прост синтаксис YAML-
Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅
.

Π‘ появата Π½Π° docker compose v3 Ρ‚Π΅Π·ΠΈ YAML Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² производствСната срСда, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Ρ€Π°Π±ΠΎΡ‚ΠΈ с
ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π”ΠΎΠΊΠ΅Ρ€ рояк.

Но ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π»ΠΈ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΡΡŠΡ‰ΠΈΡ Ρ„Π°ΠΉΠ» Π·Π° ΡΡŠΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° docker Π²
процСс Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ производствСна срСда? Или ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΡΡŠΡ‰ΠΈΡ Ρ„Π°ΠΉΠ» Π·Π°
постановка? Π•, ΠΊΠ°Ρ‚ΠΎ цяло, Π΄Π°, Π½ΠΎ Π·Π° Ρ‚Π°ΠΊΠ°Π²Π° функционалност сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ‚ слСдното:

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ: ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата Π·Π° някои
    цСнности, ΠΊΠΎΠΈΡ‚ΠΎ сС промСнят във всяка срСда.
  • ΠžΡ‚ΠΌΡΠ½Π° Π½Π° конфигурацията: Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Ρ‚ΠΎΡ€ΠΈ (ΠΈΠ»ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅
    Π΄Ρ€ΡƒΠ³ послСдващ) docker-compose Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π΅Ρ‰ΠΎ относно
    ΠΏΡŠΡ€Π²ΠΈΡΡ‚, Π° docker compose Ρ‰Π΅ сС ΠΏΠΎΠ³Ρ€ΠΈΠΆΠΈ Π·Π° сливанСто Π½Π° Π΄Π²Π°Ρ‚Π° Ρ„Π°ΠΉΠ»Π°.

Π Π°Π·Π»ΠΈΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π²ΠΎΠΉΠ½ΠΈ ΠΈ производствСни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π°ΠΉ-вСроятно Ρ‰Π΅ искатС Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°
Ρ€Π΅ΠΆΠΈΠΌ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π° Ρ‚ΠΎΠΌΡŠΡ‚ с изходния ΠΊΠΎΠ΄
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Но Π·Π° производствСна срСда
Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π½Π΅ Π΅ подходящ.

Π’ производството ΠΈΠΌΠ°Ρ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с мноТСство възли ΠΈ ΠΎΠ±Π΅ΠΌΡŠΡ‚ Π΅ Π»ΠΎΠΊΠ°Π»Π΅Π½
спрямо хоста, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (ΠΈΠ»ΠΈ услуга), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅
ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ изходния ΠΊΠΎΠ΄ Π±Π΅Π· слоТни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚
ΠΊΠΎΠ΄ΠΎΠ²Π° синхронизация, сигнали ΠΈ Π΄Ρ€.

ВмСсто Ρ‚ΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ искамС Π΄Π° създадСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° вСрсия Π½Π° вашия ΠΊΠΎΠ΄.
ΠžΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎ Π΅ Π΄Π° Π³ΠΎ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚Π΅ със ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ (ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ сСмантичСн
вСрсия ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° систСма ΠΏΠΎ ваш ΠΈΠ·Π±ΠΎΡ€).

ΠžΡ‚ΠΌΡΠ½Π° Π½Π° конфигурацията

ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ€Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ ΠΈ Ρ‡Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ зависимости ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Π² сцСнариитС
Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ производство, ясно Π΅, Ρ‡Π΅ Ρ‰Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Docker 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 Π·Π° замяна Π½Π° стойности Π΄ΠΎΠΊΠ΅Ρ€-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, Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стойността Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ‚Π΅Π½ΠΎ Π°ΠΊΠΎ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅
стойността Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, тя Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈΠ»ΠΈ натисканС
Π΄Π° сС рСгистриратС private.registry.mine.

ΠœΠΎΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са ΡƒΠ΄ΠΎΠ±Π½ΠΈ Π·Π° ΠΌΠ΅Π½, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° вас. БлСдя Ρ‚ΠΎΠ²Π°
прости ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  • Всички ΠΌΠΎΠΈ стСковС Π·Π° производство, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ срСди) са Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Ρ‡Ρ€Π΅Π·
    Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° всички ΠΌΠΎΠΈ срСди, макс.
    избягвайтС Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅.
  • Имам Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΅Π΄Π½Π° проста ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π·Π° Π΄Π° работя във всяка срСда.
  • ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° конфигурация Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° във Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠΊΠ΅Ρ€-compose.yml.
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° срСдата сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π½Π° изобраТСния ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ
    ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС промСнят ΠΎΡ‚ срСда Π² срСда (постановка, интСграция,
    производство).
  • БтойноститС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π·Π° производство сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ стойности ΠΎΡ‚
    ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚ΠΎΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π° рисковСтС, Π°ΠΊΠΎ стартиратС стСка Π² производство Π±Π΅Π·
    Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° срСдата.
  • Π—Π° Π΄Π° стартиратС услуга Π² производствСна срСда, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ стСк - ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ».
  • Π Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° срСда сС стартира с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π°Π³ΠΎΡ€Π΅ -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)Π·Π° Π΄Π° стартиратС стСка
Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ /ΠΏΡ€ΠΎΠ΅ΠΊΡ‚/срц.

Мога Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² производството! И Π±ΠΈΡ… могъл Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ
ΡΡŠΡ‰ΠΈΡ Ρ„Π°ΠΉΠ» Π΄ΠΎΠΊΠ΅Ρ€-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 Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€β€œ

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€