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

рдкрд╛рдареНрдпрдХреНрд░рдордХреЛ рд╕реБрд░реБрд╡рд╛рддрдХреЛ рдкреНрд░рддреНрдпрд╛рд╢рд╛рдорд╛ рддрдпрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдкреЛрдбрдХрд╛рд╕реНрдЯ рдЯреНрд░рд╛рдиреНрд╕рдХреНрд░рд┐рдкреНрд╢рдирдХреЛ рдЕрдиреБрд╡рд╛рдж "рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рдХ"

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

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

рдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреБ рдбрдХрд░-рдХрдореНрдкреЛрдЬ (рдбрдХрд░-рдХрдореНрдкреЛрдЬ рдЕрдк)рд╕реНрдЯреНрдпрд╛рдХ рднрд┐рддреНрд░ рдЪрд▓рд╛рдЙрди
рд╕реНрд░реЛрдд рдХреЛрдб рдорд╛рдЙрдиреНрдЯ рднрдПрдХреЛ рд╡рд┐рдХрд╛рд╕ рдореЛрдб /рдкрд░рд┐рдпреЛрдЬрдирд╛/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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди