Docker Compose: ืคึฟื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข

ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืึธื“ืงืึทืกื˜ ื˜ืจืึทื ืกืงืจื™ืคึผืฆื™ืข ืฆื•ื’ืขื’ืจื™ื™ื˜ ืื™ืŸ ืึทื ื˜ื™ืกืึทืคึผื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ืขื ืงื•ืจืก "ืœื™ื ื•ืงืก ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ"

Docker Compose: ืคึฟื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข

Docker Compose ืื™ื– ืึทืŸ ืึทืžื™ื™ื–ื™ื ื’ ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ืึทืจื‘ืขื˜
ืกื•ื•ื™ื•ื•ืข ืคึฟืึทืจ ื“ื™ ืึธื ืœื™ื™ื’ืŸ ื’ืขื ื™ืฆื˜ ืื™ืŸ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืขืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื“ืขืคื™ื ื™ืจืŸ
ื™ืขื“ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ืคื•ืŸ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ื ืึธืš ืึท ืงืœืึธืจ ืื•ืŸ ืคึผืฉื•ื˜ ืกื™ื ื˜ืึทืงืก ืื™ืŸ ื™ืืžืœ-
ื˜ืขืงืขืก
.

ืžื™ื˜ ื“ืขื ืึธื ืงื•ืžืขืŸ ืคื•ืŸ docker compose v3 ื“ื™ YAML ื˜ืขืงืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื’ืœื™ื™ึทืš ืื™ืŸ ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืŸ ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜
ืงื ื•ื™ืœ ื“ืึธืงืงืขืจ ืกื•ื•ืึธืจื.

ืึธื‘ืขืจ ื˜ื•ื˜ ื“ืึธืก ืžื™ื™ื ืขืŸ ืึทื– ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ ื–ืขืœื‘ืข ื“ืึธืงืงืขืจ-ืงืึธืžืคึผืึธืกืข ื˜ืขืงืข ืื™ืŸ
ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคึผืจืึธืฆืขืก ืื•ืŸ ืื™ืŸ ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกื•ื•ื™ื•ื•ืข? ืึธื“ืขืจ ื ื•ืฆืŸ ื“ื™ ื–ืขืœื‘ืข ื˜ืขืงืข ืคึฟืึทืจ
ืกื˜ืึทื’ื™ื ื’? ื ื•, ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื™ืึธ, ืึธื‘ืขืจ ืคึฟืึทืจ ื“ืขื ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืžื™ืจ ื“ืึทืจืคึฟืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

  • ื•ื•ืขืจื™ืึทื‘ืึทืœ ื™ื ื˜ืขืจืคึผืึธืœืึทื˜ื™ืึธืŸ: ื ื™ืฆืŸ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืคึฟืึทืจ ืขื˜ืœืขื›ืข
    ื•ื•ืึทืœื•ืขืก ื•ื•ืึธืก ื˜ื•ื™ืฉืŸ ืื™ืŸ ื™ืขื“ืขืจ ืกื•ื•ื™ื•ื•ืข.
  • ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื“: ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื“ืขืคื™ื ื™ืจืŸ ืึท ืจื’ืข (ืึธื“ืขืจ ืงื™ื™ืŸ
    ืืŸ ืื ื“ืขืจ ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜) 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

ื•ื•ื™ ื’ืขื–ืึธื’ื˜, ื“ืึธืงืขืจ ืงืึทืžืคึผืึธื•ื– ืฉื˜ื™ืฆื˜ ืงืึทืžื‘ื™ื™ื ื™ื ื’ ืงื™ื™ืคืœ ืงืึทืžืคึผืึธื•ื–ื™ื– -
ื˜ืขืงืขืก, ื“ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืึธื•ื•ื•ืขืจืจื™ื™ื“ ืคืึทืจืฉื™ื“ืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืื™ืŸ ื“ื™ ืจื’ืข ื˜ืขืงืข. ืœืžืฉืœ:

$ 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.override.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 -with-registry-auth ืžื™ื™ืŸ-ืกื˜ืึทืง-ื ืึธืžืขืŸ.
  • ื“ื™ ืึทืจื‘ืขื˜ ืกื•ื•ื™ื•ื•ืข ืื™ื– ืกื˜ืึทืจื˜ืขื“ ื ื™ืฆืŸ ื“ื™ ื‘ืึทืคึฟืขืœ ื“ืึธืงื˜ืขืจ-ืงืึทืžืคึผืึธื•ื– ืึทืจื•ื™ืฃ-ื“ื™.

ื–ืืœ ืก ืงื•ืง ื‘ื™ื™ึท ืึท ืคึผืฉื•ื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ.

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

ืื™ืš ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ืึธืงืขืจ-ืงืึธืžืคึผืึธืกืข (ื“ืึธืงืงืขืจ-ืงืึธืžืคึผืึธืกืข ืึทืจื•ื™ืฃ)ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืกื˜ืึทืง ืื™ืŸ
ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืžืึธื“ืข ืžื™ื˜ ืžืงื•ืจ ืงืึธื“ ืžืึธื•ื ื˜ืขื“ ืื™ืŸ /project/src.

ืื™ืš ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ ื–ืขืœื‘ืข ื˜ืขืงืขืก ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข! ืื•ืŸ ืื™ืš ืงืขืŸ ื‘ืืฉื˜ื™ืžื˜ ื ื•ืฆืŸ
ื–ืขืœื‘ื™ืงืขืจ ื˜ืขืงืข ื“ืึธืงืงืขืจ-ืงืึธืžืคึผืึธืกืข.ื™ืžืœ ืคึฟืึทืจ ืกื˜ืึทื’ื™ื ื’. ืฆื• ื™ืงืกืคึผืึทื ื“ ื“ืขื ืฆื•
ืคึผืจืึธื“ื•ืงืฆื™ืข, ืื™ืš ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ื•ื™ืขืŸ ืื•ืŸ ืฉื™ืงืŸ ื“ื™ ื‘ื™ืœื“ ืžื™ื˜ ืึท ืคึผืจืขื“ืขืคื™ื ืขื“ ืงื•ื•ื™ื˜ืœ
ืื™ืŸ ื“ื™ 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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’