เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช: เชตเชฟเช•เชพเชธเชฅเซ€ เช‰เชคเซเชชเชพเชฆเชจ เชธเซเชงเซ€

เช…เชญเซเชฏเชพเชธเช•เซเชฐเชฎเชจเซ€ เชถเชฐเซ‚เช†เชคเชจเซ€ เช…เชชเซ‡เช•เซเชทเชพเช เชคเซˆเชฏเชพเชฐ เช•เชฐเซ‡เชฒ เชชเซ‹เชกเช•เชพเชธเซเชŸ เชŸเซเชฐเชพเชจเซเชธเช•เซเชฐเชฟเชชเซเชถเชจเชจเซ‹ เช…เชจเซเชตเชพเชฆ "เชฒเชฟเชจเช•เซเชธ เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐ"

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช: เชตเชฟเช•เชพเชธเชฅเซ€ เช‰เชคเซเชชเชพเชฆเชจ เชธเซเชงเซ€

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เช เชตเชฐเซเช•เชฟเช‚เช— เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชเช• เช…เชฆเซเชญเซเชค เชธเชพเชงเชจ เช›เซ‡
เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชธเซเชŸเซ‡เช• เชฎเชพเชŸเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ. เชคเซ‡ เชคเชฎเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡
เชฎเชพเช‚ เชธเซเชชเชทเซเชŸ เช…เชจเซ‡ เชธเชฐเชณ เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เช…เชจเซเชธเชฐเซ€เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชฆเชฐเซ‡เช• เช˜เชŸเช• YAML-
เชซเชพเชˆเชฒเซ‹
.

เชจเชพ เช†เช—เชฎเชจ เชธเชพเชฅเซ‡ เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช v3 เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช† YAML เชซเชพเชˆเชฒเซ‹เชจเซ‹ เช‰เชคเซเชชเชพเชฆเชจ เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฎเชพเช‚ เชธเซ€เชงเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡
เช•เซเชฒเชธเซเชŸเชฐ เชกเซ‹เช•เชฐ เชธเซเชตเซ‹เชฐเซเชฎ.

เชชเชฐเช‚เชคเซ เชถเซเช‚ เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชธเชฎเชพเชจ เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹
เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช…เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚? เช…เชฅเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹
เชธเซเชŸเซ‡เชœเซ€เช‚เช—? เชธเชพเชฐเซเช‚, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชนเชพ, เชชเชฐเช‚เชคเซ เช† เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชจเซ€เชšเซ‡เชจเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

  • เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒ เช‡เชจเซเชŸเชฐเชชเซ‹เชฒเซ‡เชถเชจ: เช•เซ‡เชŸเชฒเชพเช• เชฎเชพเชŸเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช—
    เชฎเซ‚เชฒเซเชฏเซ‹ เชœเซ‡ เชฆเชฐเซ‡เช• เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เชฌเชฆเชฒเชพเชฏ เช›เซ‡.
  • เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช“เชตเชฐเชฐเชพเช‡เชก: เชธเซ‡เช•เชจเซเชกเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ (เช…เชฅเชตเชพ เช•เซ‹เชˆเชชเชฃ
    เชฌเซ€เชœเซ€ เช…เชจเซเช—เชพเชฎเซ€) เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช เชซเชพเช‡เชฒ เชœเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช•เช‚เชˆเช• เชฌเชฆเชฒเชถเซ‡
    เชชเซเชฐเชฅเชฎ, เช…เชจเซ‡ เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชฌเช‚เชจเซ‡ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชฎเชฐเซเชœ เช•เชฐเชตเชพเชจเซ€ เช•เชพเชณเชœเซ€ เชฒเซ‡เชถเซ‡.

เชตเชฟเช•เชพเชธ เช…เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชซเชพเช‡เชฒเซ‹ เชตเชšเซเชšเซ‡เชจเซ‹ เชคเชซเชพเชตเชค

เชตเชฟเช•เชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชคเชฎเซ‡ เชธเช‚เชญเชตเชคเชƒ เช•เซ‹เชก เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชคเชชเชพเชธเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹
เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฎเชฏ. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชธเซเชฐเซ‹เชค เช•เซ‹เชก เชธเชพเชฅเซ‡เชจเซ‹ เชตเซ‹เชฒเซเชฏเซเชฎ เชฎเชพเช‰เชจเซเชŸ เชฅเชฏเซ‡เชฒ เช›เซ‡
เช•เชจเซเชŸเซ‡เชจเชฐ เช•เซ‡ เชœเซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชฐเชจเชŸเชพเช‡เชฎ เชงเชฐเชพเชตเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช‰เชคเซเชชเชพเชฆเชจ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชŸเซ‡
เช† เชชเชฆเซเชงเชคเชฟ เชฏเซ‹เช—เซเชฏ เชจเชฅเซ€.

เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚, เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช˜เชฃเชพ เช—เชพเช‚เช เซ‹ เชธเชพเชฅเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เช›เซ‡, เช…เชจเซ‡ เชตเซ‹เชฒเซเชฏเซเชฎ เชธเซเชฅเชพเชจเชฟเช• เช›เซ‡
เชœเซ‡ เชจเซ‹เชก เชชเชฐ เชคเชฎเชพเชฐเซเช‚ เช•เชจเซเชŸเซ‡เชจเชฐ (เช…เชฅเชตเชพ เชธเซ‡เชตเชพ) เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเชพ เชธเช‚เชฌเช‚เชงเชฎเชพเช‚, เชคเซ‡เชฅเซ€ เชคเชฎเซ‡ เชจเชฅเซ€
เชคเชฎเซ‡ เชธเซ‹เชฐเซเชธ เช•เซ‹เชกเชจเซ‡ เชœเชŸเชฟเชฒ เช•เชพเชฎเช—เซ€เชฐเซ€ เชตเชฟเชจเชพ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชœเซ‡เชฎเชพเช‚ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡
เช•เซ‹เชก เชธเชฟเช‚เช•เซเชฐเชจเชพเช‡เชเซ‡เชถเชจ, เชธเชฟเช—เซเชจเชฒเซ‹, เชตเช—เซ‡เชฐเซ‡.

เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เช…เชฎเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชคเชฎเชพเชฐเชพ เช•เซ‹เชกเชจเชพ เชšเซ‹เช•เซเช•เชธ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เชเช• เช›เชฌเซ€ เชฌเชจเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช.
เชคเซ‡เชจเซ‡ เชฏเซ‹เช—เซเชฏ เชŸเซ‡เช— เชธเชพเชฅเซ‡ เชšเชฟเชนเซเชจเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เชฐเชฟเชตเชพเชœ เช›เซ‡ (เชคเชฎเซ‡ เชธเชฟเชฎเซ‡เชจเซเชŸเซ€เช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹
เชธเช‚เชธเซเช•เชฐเชฃ เช…เชฅเชตเชพ เช…เชจเซเชฏ เชธเชฟเชธเซเชŸเชฎ เชคเชฎเชพเชฐเซ€ เชฎเซเชจเชธเชซเซ€ เชชเชฐ).

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช“เชตเชฐเชฐเชพเช‡เชก

เชคเชซเชพเชตเชคเซ‹เชจเซ‡ เชœเซ‹เชคเชพเช‚ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เช…เชตเชฒเช‚เชฌเชจ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เช…เชฒเช— เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡
เชตเชฟเช•เชพเชธ เช…เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ, เชคเซ‡ เชธเซเชชเชทเซเชŸ เช›เซ‡ เช•เซ‡ เช…เชฎเชจเซ‡ เชตเชฟเชตเชฟเชง เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชตเชฟเชตเชฟเชง เช•เช‚เชชเซ‹เช เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชฎเชฐเซเชœ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฎเชฐเซเชฅเชจ เช•เชฐเซ‡ เช›เซ‡
เช…เช‚เชคเชฟเชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเซ‡เชณเชตเซ‹. เช† เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡:

$ 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, เชฎเซ‚เชฒเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชคเชพเชœเซ‡เชคเชฐเชจเซ€เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชธเซ‡เชŸ เช•เชฐเซ‹ เช›เซ‹
เชฌเชฟเชฒเซเชก เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ, เชคเซ‡ เชฌเชฟเชฒเซเชก เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช…เชฅเชตเชพ เชฆเชฌเชพเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชถเซ‡
เชฐเชœเซ€เชธเซเชŸเชฐ เชฎเชพเชŸเซ‡ private.registry.mine.

เชฎเชพเชฐเชพ เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹

เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเชคเชพ เช…เชญเชฟเช—เชฎเซ‹ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเชฃ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชนเซเช‚ เช†เชจเซเช‚ เชชเชพเชฒเชจ เช•เชฐเซเช‚ เช›เซเช‚
เชธเชฐเชณ เชจเชฟเชฏเชฎเซ‹:

  • เช‰เชคเซเชชเชพเชฆเชจ, เชตเชฟเช•เชพเชธ (เช…เชฅเชตเชพ เช…เชจเซเชฏ เชตเชพเชคเชพเชตเชฐเชฃ) เชฎเชพเชŸเซ‡เชจเชพ เชฎเชพเชฐเชพ เชคเชฎเชพเชฎ เชธเซเชŸเซ‡เช•เซเชธ เชฆเซเชตเชพเชฐเชพ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡
    เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช เชซเชพเช‡เชฒเซ‹
  • เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเซ‹ เชฎเชพเชฐเชพ เชฌเชงเชพ เชตเชพเชคเชพเชตเชฐเชฃเชจเซ‡ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซ€ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡
    เชกเซเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชŸเชพเชณเซ‹.
  • เชฆเชฐเซ‡เช• เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชจเซ‡ เชเช• เชธเชฐเชณ เช†เชฆเซ‡เชถเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
  • เชฎเซเช–เซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชฎเชพเช‚ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡ เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช.เชเชฎเชเชฎเชเชฒ.
  • เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹ เช‡เชฎเซ‡เชœ เชŸเซ…เช—เซเชธ เช…เชฅเชตเชพ เช…เชจเซเชฏ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡
    เชšเชฒเซ‹ เช•เซ‡ เชœเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฅเซ€ เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฎเชพเช‚ เชฌเชฆเชฒเชพเชˆ เชถเช•เซ‡ เช›เซ‡ (เชธเซเชŸเซ‡เชœเชฟเช‚เช—, เชเช•เซ€เช•เชฐเชฃ,
    เช‰เชคเซเชชเชพเชฆเชจ).
  • เช‰เชคเซเชชเชพเชฆเชจ เชšเชฒเซ‹เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชฎเซ‚เชฒเซเชฏเซ‹ เชคเชฐเซ€เช•เซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡
    เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เชœเซ‹ เชธเซเชŸเซ‡เช• เชตเช—เชฐ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‹ เช† เชœเซ‹เช–เชฎเซ‹ เช˜เชŸเชพเชกเซ‡ เช›เซ‡
    เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒ เชธเซ‡เชŸ เช•เชฐเซ‹.
  • เช‰เชคเซเชชเชพเชฆเชจ เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฎเชพเช‚ เชธเซ‡เชตเชพ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เชกเซ‹เช•เชฐ เชธเซเชŸเซ‡เช• เชœเชฎเชพเชตเชŸ - เช•เชฎเซเชชเซ‹เช-เชซเชพเช‡เชฒ 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
...

เชนเซเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซเช‚ เช›เซเช‚ เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช (เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช เช…เชช)เชฎเชพเช‚ เชธเซเชŸเซ‡เช• เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡
เชฎเชพเช‚ เชฎเชพเช‰เชจเซเชŸ เชฅเชฏเซ‡เชฒ เชธเซเชฐเซ‹เชค เช•เซ‹เชก เชธเชพเชฅเซ‡ เชตเชฟเช•เชพเชธ เชฎเซ‹เชก /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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹