рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ: рд╡рд┐рдХрд╛рд╕рд╛рдкрд╛рд╕реВрди рдЙрддреНрдкрд╛рджрдирд╛рдкрд░реНрдпрдВрдд

рдЕрднреНрдпрд╛рд╕рдХреНрд░рдо рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рдЕрдкреЗрдХреНрд╖реЗрдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреЙрдбрдХрд╛рд╕реНрдЯ рдЯреНрд░рд╛рдиреНрд╕рдХреНрд░рд┐рдкреНрд╢рдирдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ "рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рдХ"

рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ: рд╡рд┐рдХрд╛рд╕рд╛рдкрд╛рд╕реВрди рдЙрддреНрдкрд╛рджрдирд╛рдкрд░реНрдпрдВрдд

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

рдореА рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ рдбреЙрдХрд░-рдХрдВрдкреЛрдЬ (рдбреЙрдХрд░-рдХрдВрдкреЛрдЬ рдЕрдк)рдордзреНрдпреЗ рд╕реНрдЯреЕрдХ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА
рдордзреНрдпреЗ рдЖрд░реЛрд╣рд┐рдд рд╕реНрддреНрд░реЛрдд рдХреЛрдбрд╕рд╣ рд╡рд┐рдХрд╛рд╕ рдореЛрдб /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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛