Docker Compose: ΠΎΠ΄ Ρ€Π°Π·Π²ΠΎΡ˜ Π΄ΠΎ производство

ΠŸΡ€Π΅Π²ΠΎΠ΄ Π½Π° Ρ‚Ρ€Π°Π½ΡΠΊΡ€ΠΈΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° подкаст ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° Π²ΠΎ прСсрСт Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° курсот β€žΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° Π›ΠΈΠ½ΡƒΠΊΡβ€œ

Docker Compose: ΠΎΠ΄ Ρ€Π°Π·Π²ΠΎΡ˜ Π΄ΠΎ производство

Docker Compose Π΅ Π½Π΅Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½Π° Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° создавањС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π°
ΠΎΠΊΠΎΠ»ΠΈΠ½Π° Π·Π° стСкот ΡˆΡ‚ΠΎ сС користи Π²ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. Π’ΠΎΠ° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅
сСкоја ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΎΠ΄ Π²Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, слСдСјќи јасна ΠΈ Сдноставна синтакса Π²ΠΎ YAML-
Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ
.

Π‘ΠΎ Π΄ΠΎΠ°Ρ“Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° docker compose v3 ΠΎΠ²ΠΈΠ΅ YAML-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користат Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎ производствСната срСдина ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° со
Π“Ρ€ΠΎΠ·Π΄ Π”ΠΎΠΊΠ΅Ρ€ Ρ€ΠΎΡ˜.

Но, Π΄Π°Π»ΠΈ ΠΎΠ²Π° Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја користитС истата Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠΌΠΏΠΎΠ½ΠΈΡ€Π°ΡšΠ΅ Π²ΠΎ
процСс Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ ΠΈ Π²ΠΎ производствСната срСдина? Или користСтС ја истата Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π°
ΠΈΠ½ΡΡ†Π΅Π½ΠΈΡ€Π°ΡšΠ΅? Па, Π²ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π΄Π°, Π½ΠΎ Π·Π° ΠΎΠ²Π°Π° функционалност Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° слСдново:

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°: ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° Π·Π° Π½Π΅ΠΊΠΎΠΈ
    врСдности ΠΊΠΎΠΈ сС ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ сСкоја срСдина.
  • ΠžΡ‚Ρ„Ρ€Π»Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°: способност Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Π²Ρ‚ΠΎΡ€Π° (ΠΈΠ»ΠΈ која Π±ΠΈΠ»ΠΎ
    ΡƒΡˆΡ‚Π΅ Π΅Π΄Π½Π° слСдна) Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° 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 ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° повСќС ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ -
Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΠ²Π° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΎΡ‚Ρ„Ρ€Π»ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π²ΠΎ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

$ 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}
...

И Π°ΠΊΠΎ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ° ΠΈΠ·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ‚ΠΈΡΠΊΠ°ΡšΠ΅) со Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠΌΠΏΠΎΠ½ΠΈΡ€Π°ΡšΠ΅ Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π°
$MY_SERVICE_VERSION, врСдноста ќС сС користи Π½Π°Ρ˜Π½ΠΎΠ²ΠΈΡ‚Π΅Π½ΠΎ Π°ΠΊΠΎ поставитС
врСдноста Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина ΠΏΡ€Π΅Π΄ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π°, ќС сС користи ΠΏΡ€ΠΈ Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ‚ΠΈΡΠΊΠ°ΡšΠ΅
Π΄ΠΎ рСгистарот ΠΏΡ€ΠΈΠ²Π°Ρ‚Π΅Π½.рСгистар.мој.

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

ΠŸΡ€ΠΈΡΡ‚Π°ΠΏΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π°Ρ‚ Π·Π° ΠΌΠ΅Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ ΠΈ Π·Π° вас. Јас Π³ΠΈ слСдам ΠΎΠ²ΠΈΠ΅
Сдноставни ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  • Π‘ΠΈΡ‚Π΅ ΠΌΠΎΠΈ ΠΊΡƒΠΏΠΎΠ²ΠΈ Π·Π° производство, Ρ€Π°Π·Π²ΠΎΡ˜ (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ срСдини) сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€Π΅ΠΊΡƒ
    Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠΌΠΏΠΎΠ½ΠΈΡ€Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ
  • ΠŸΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ сС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π·Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠΊΡ€ΠΈΡ˜Π°Ρ‚ ситС ΠΌΠΎΠΈ срСдини, ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ повСќС
    ΠΈΠ·Π±Π΅Π³Π½ΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π΄ΡƒΠΏΠ»ΠΈΡ€Π°ΡšΠ΅.
  • Ми Ρ‚Ρ€Π΅Π±Π° Π΅Π΄Π½Π° Сдноставна ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π²ΠΎ сСкоја срСдина.
  • Π“Π»Π°Π²Π½Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° docker-compose.yml.
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина сС користат Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΎΠ·Π½Π°ΠΊΠΈ Π½Π° слики ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ
    ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°Ρ€ΠΈΡ€Π°Π°Ρ‚ ΠΎΠ΄ срСдина Π΄ΠΎ срСдина (ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°,
    производство).
  • ВрСдноститС Π½Π° производствСнитС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ сС користат ΠΊΠ°ΠΊΠΎ врСдности Π·Π°
    ΠΏΠΎ Π΄ΠΈΡ„ΠΎΠ»Ρ‚, ΠΎΠ²Π° Π³ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π° Ρ€ΠΈΠ·ΠΈΡ†ΠΈΡ‚Π΅ Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ ΠΎΡŸΠ°ΠΊΠΎΡ‚ сС лансира Π²ΠΎ производство Π±Π΅Π·
    постави ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π°.
  • Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ услуга Π²ΠΎ производствСна срСдина, користСтС ја ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Π Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° срСдина сС стартува со помош Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠΌΠΏΠΎΠ½ΠΈΡ€Π°Ρ˜ -Π”.

АјдС Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ СдноставСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

# 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)Π·Π° Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ°Π³Π°Ρ†ΠΈΠ½ΠΎΡ‚
Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ со ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ ΠΈΠ·Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ /ΠΏΡ€ΠΎΠ΅ΠΊΡ‚/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

Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, користСвмС Π΄Π²Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠΌΠΏΠΎΠ½ΠΈΡ€Π°ΡšΠ΅, ΠΊΠΎΠΈ Π±Π΅Π·
Π”ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ‚Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користат Π·Π° која Π±ΠΈΠ»ΠΎ срСдина ΡˆΡ‚ΠΎ ја ΠΈΠΌΠ°Ρ‚Π΅!

Π”ΠΎΠ·Π½Π°Ρ˜Ρ‚Π΅ повСќС Π·Π° курсот β€žΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° Π›ΠΈΠ½ΡƒΠΊΡβ€œ

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€