เดกเต‹เด•เตเด•เตผ เดฐเดšเดจ: เดตเดฟเด•เดธเดจเด‚ เดฎเตเดคเตฝ เด‰เดคเตเดชเดพเดฆเดจเด‚ เดตเดฐเต†

เด•เต‹เดดเตโ€Œเดธเดฟเดจเตเดฑเต† เด†เดฐเด‚เดญเด‚ เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเต เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฟเดฏ เดชเต‹เดกเตโ€Œเด•เดพเดธเตเดฑเตเดฑเต เดŸเตเดฐเดพเตปเดธเตโ€Œเด•เตเดฐเดฟเดชเตเดทเดจเตเดฑเต† เดตเดฟเดตเตผเดคเตเดคเดจเด‚ "เดฒเดฟเดจเด•เตเดธเต เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผ"

เดกเต‹เด•เตเด•เตผ เดฐเดšเดจ: เดตเดฟเด•เดธเดจเด‚ เดฎเตเดคเตฝ เด‰เดคเตเดชเดพเดฆเดจเด‚ เดตเดฐเต†

เด’เดฐเต เดœเต‹เดฒเดฟ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด…เดคเตเดญเตเดคเด•เดฐเดฎเดพเดฏ เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต เดกเต‹เด•เตเด•เตผ เด•เดฎเตเดชเต‹เดธเต
เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเตเดฑเตเดฑเดพเด•เตเด•เดฟเดจเตเดณเตเดณ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ. เด‡เดคเต เดจเดฟเตผเดตเตเดตเดšเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต
เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เด“เดฐเต‹ เด˜เดŸเด•เด™เตเด™เดณเตเด‚, เดตเตเดฏเด•เตเดคเดตเตเด‚ เดฒเดณเดฟเดคเดตเตเดฎเดพเดฏ เดตเดพเด•เตเดฏเด˜เดŸเดจ เดชเดฟเดจเตเดคเตเดŸเดฐเตเดจเตเดจเต 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 เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเต† เดฎเดฑเดฟเด•เดŸเด•เตเด•เดพเตป 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, เดฎเต‚เดฒเตเดฏเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏเดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ
เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเดจเต เดฎเตเดฎเตเดชเตเดณเตเดณ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚, เด…เดคเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดฎเตเดชเต‹เดดเต‹ เดคเดณเตเดณเตเดฎเตเดชเต‹เดดเต‹ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚
เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต private.registry.mine.

เดŽเดจเตเดฑเต† เดคเดคเตเดตเด™เตเด™เตพ

เดŽเดจเดฟเด•เตเด•เดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดธเดฎเต€เดชเดจเด™เตเด™เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เตเด‚ เดตเต‡เดฃเตเดŸเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเต‡เด•เตเด•เดพเด‚. เดžเดพเตป เด‡เดต เดชเดฟเดจเตเดคเตเดŸเดฐเตเดจเตเดจเต
เดฒเดณเดฟเดคเดฎเดพเดฏ เดจเดฟเดฏเดฎเด™เตเด™เตพ:

  • เด‰เดคเตเดชเดพเดฆเดจเด‚, เดตเดฟเด•เดธเดจเด‚ (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เตพ) เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เดพเดฏเตเดณเตเดณ เดŽเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดธเตเดฑเตเดฑเดพเด•เตเด•เตเด•เดณเตเด‚ เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต
    docker-compose เดซเดฏเดฒเตเด•เตพ
  • เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เดŽเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เดณเตเด‚ เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เด•เดตเตผ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต
    เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเต เด’เดดเดฟเดตเดพเด•เตเด•เตเด•.
  • เด“เดฐเต‹ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดŽเดจเดฟเด•เตเด•เต เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เดฎเดพเตปเดกเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต.
  • เดชเตเดฐเดงเดพเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเตฝ เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต docker-compose.yml.
  • เด‡เดฎเต‡เดœเต เดŸเดพเด—เตเด•เดณเต‹ เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเต‹ เดจเดฟเตผเดตเตเดตเดšเดฟเด•เตเด•เดพเตป เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต
    เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเต†เดŸเดพเดตเตเดจเตเดจ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ (เดธเตเดฑเตเดฑเต‡เดœเดฟเด‚เด—เต, เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป,
    เด‰เดคเตเดชเดพเดฆเดจเด‚).
  • เดชเตเดฐเตŠเดกเด•เตเดทเตป เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต
    เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เดธเตเดฑเตเดฑเดพเด•เตเด•เต เด‡เดฒเตเดฒเดพเดคเต† เด‰เตฝเดชเตเดชเดพเดฆเดจเดคเตเดคเดฟเตฝ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เด‡เดคเต เด…เดชเด•เดŸเดธเดพเดงเตเดฏเดคเด•เตพ เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเต
    เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด•.
  • เด’เดฐเต เดชเตเดฐเตŠเดกเด•เตเดทเตป เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เด’เดฐเต เดธเต‡เดตเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดกเต‹เด•เตเด•เตผ เดธเตเดฑเตเดฑเดพเด•เตเด•เต เดตเดฟเดจเตเดฏเดพเดธเด‚ - เดฐเดšเดฟเด•เตเด•เตเด•-เดซเดฏเตฝ 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.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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•