เจกเฉŒเจ•เจฐ เจ•เฉฐเจชเฉ‹เจœเจผ: เจตเจฟเจ•เจพเจธ เจคเฉ‹เจ‚ เจ‰เจคเจชเจพเจฆเจจ เจคเฉฑเจ•

เจ•เฉ‹เจฐเจธ เจฆเฉ‡ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจตเจฟเฉฑเจš เจคเจฟเจ†เจฐ เจชเฉ‹เจกเจ•เจพเจธเจŸ เจŸเฉเจฐเจพเจ‚เจธเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจฆเจพ เจ…เจจเฉเจตเจพเจฆ "เจฒเฉ€เจจเจ•เจธ เจชเฉเจฐเจธเจผเจพเจธเจ•"

เจกเฉŒเจ•เจฐ เจ•เฉฐเจชเฉ‹เจœเจผ: เจตเจฟเจ•เจพเจธ เจคเฉ‹เจ‚ เจ‰เจคเจชเจพเจฆเจจ เจคเฉฑเจ•

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

เจฎเฉˆเจ‚ เจตเจฐเจค เจธเจ•เจฆเจพ เจนเจพเจ‚ เจกเฉŒเจ•เจฐ-เจ•เฉฐเจชเฉ‹เจœเจผ (เจกเฉŒเจ•เจฐ-เจ•เฉฐเจชเฉ‹เจœเจผ เจ…เฉฑเจช)เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ• เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ
เจตเจฟเฉฑเจš เจฎเจพเจŠเจ‚เจŸ เจ•เฉ€เจคเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจฆเฉ‡ เจจเจพเจฒ เจตเจฟเจ•เจพเจธ เจฎเฉ‹เจก /เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ/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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹