рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝: рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдЙрддреНрдкрд╛рджрди рддрдХ

рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рдкреЙрдбрдХрд╛рд╕реНрдЯ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ "рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рдХ"

рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝: рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдЙрддреНрдкрд╛рджрди рддрдХ

рд╡рд░реНрдХрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдПрдХ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рд╣реИ
рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдгред рдпрд╣ рдЖрдкрдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП YAML-
рдлрд╝рд╛рдЗрд▓реЗрдВ
.

рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ v3 рдЗрди YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕реАрдзреЗ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЭреБрдВрдб рдбреЛрдХрд░ рдЭреБрдВрдб.

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕реА рдбреЙрдХрд░-рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ? рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдордВрдЪрди? рдЦреИрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХреНрд╖реЗрдк: рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
    рдореВрд▓реНрдп рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред
  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдУрд╡рд░рд░рд╛рдЗрдб: рджреВрд╕рд░реЗ (рдпрд╛ рдХрд┐рд╕реА рднреА) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
    рдПрдХ рдФрд░ рдЕрдЧрд▓реА) docker-compose рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдХреБрдЫ рдмрджрд▓ рджреЗрдЧреА
    рдкрд╣рд▓рд╛, рдФрд░ docker рдХрдВрдкреЛрдЬрд╝ рджреЛрдиреЛрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред

рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЙрддреНрдкрд╛рджрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░

рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рд╕рдВрднрд╡рддрдГ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ
рд░рд┐рдпрд▓ рдЯрд╛рдЗрдоред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдорддреМрд░ рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рд╡рд╛рд▓рд╛ рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХрдВрдЯреЗрдирд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП
рдпрд╣ рд╡рд┐рдзрд┐ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ.

рдЙрддреНрдкрд╛рджрди рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдиреЛрдбреНрд╕ рд╡рд╛рд▓рд╛ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИ, рдФрд░ рд╡реЙрд▓реНрдпреВрдо рд╕реНрдерд╛рдиреАрдп рд╣реИ
рдЙрд╕ рдиреЛрдб рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХрд╛ рдХрдВрдЯреЗрдирд░ (рдпрд╛ рд╕реЗрд╡рд╛) рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
рдЖрдк рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХреЛрдб рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди, рд╕рд┐рдЧреНрдирд▓, рдЖрджрд┐ред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдЯреИрдЧ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдерд╛ рд╣реИ (рдЖрдк рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рд╡рд░реНрдЬрдирд┐рдВрдЧ рдпрд╛ рдЖрдкрдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдХреЛрдИ рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдо)ред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдУрд╡рд░рд░рд╛рдЗрдб

рдорддрднреЗрджреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдФрд░ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ
рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЙрддреНрдкрд╛рджрди, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
рдЕрдВрддрд┐рдо рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ. рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

$ 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 рдореВрд▓реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдбреЛрдХрд░-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_рд╕рдВрд╕реНрдХрд░рдг, рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдЬрд╝рд╛ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ
рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдорд╛рди, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг рдпрд╛ рдкреБрд╢ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдкреНрд░рд╛рдЗрд╡реЗрдЯ.рд░рдЬрд┐рд╕реНрдЯреНрд░реА.рдореЗрд░рд╛.

рдореЗрд░реЗ рд╕рд┐рджреНрдзрд╛рдВрдд

рдЬреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрдирдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ
рд╕рд░рд▓ рдирд┐рдпрдо:

  • рдЙрддреНрдкрд╛рджрди, рд╡рд┐рдХрд╛рд╕ (рдпрд╛ рдЕрдиреНрдп рд╡рд╛рддрд╛рд╡рд░рдг) рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╕рднреА рд╕реНрдЯреИрдХ рдХреЛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
    рдбреЛрдХрд░-рд▓рд┐рдЦреЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ
  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдореЗрд░реЗ рд╕рднреА рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
    рдирдХрд▓ рд╕реЗ рдмрдЪреЗрдВ.
  • рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЖрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  • рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдбреЛрдХрд░-compose.yml.
  • рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╡рд┐ рдЯреИрдЧ рдпрд╛ рдЕрдиреНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
    рд╡реЗ рдЪрд░ рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реНрдЯреЗрдЬрд┐рдВрдЧ, рдПрдХреАрдХрд░рдг,
    рдЙрддреНрдкрд╛рджрди)ред
  • рдЙрддреНрдкрд╛рджрди рдЪрд░ рдХреЗ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
    рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрджрд┐ рд╕реНрдЯреИрдХ рдХреЛ рдмрд┐рдирд╛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ
    рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
  • рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рд╕реЗрд╡рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдбреЙрдХрд░ рд╕реНрдЯреИрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди - рдХрдВрдкреЛрдЬрд╝-рдлрд╝рд╛рдЗрд▓ 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.

рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрдиреНрд╣реАрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ! рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
рд╡рд╣реА рдлрд╝рд╛рдЗрд▓ рдбреЛрдХрд░-compose.yml рдордВрдЪрди рдХреЗ рд▓рд┐рдП. рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЙрддреНрдкрд╛рджрди, рдореБрдЭреЗ рдмрд╕ рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╕реАрдЖрдИ рдЪрд░рдг рдореЗрдВ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ