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  | 
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  | 
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  | 
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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster