ืชืจืืื ืชืืืื ืืคืืืงืืกื ืฉืืืื ืืงืจืืช ืชืืืืช ืืงืืจืก
Docker Compose ืืื ืืื ืืืืื ืืืฆืืจืช ืขืืืื
ืกืืืื ืขืืืจ ืืืืกื ืืช ืืืฉืืฉืช ืืืืฉืื ืฉืื. ืื ืืืคืฉืจ ืื ืืืืืืจ
ืื ืจืืื ืฉื ืืืืฉืื ืฉืื, ืืขืงืืืช ืชืืืืจ ืืจืืจ ืืคืฉืื ื
ืงืืฆืื
ืขื ืื ืืกืชื ืฉื
ืึถืฉืืึผืึนื
ืืื ืืื ืื ืืืืจ ืฉืืชื ืืืื ืืืฉืชืืฉ ืืืืชื ืงืืืฅ docker-compose ื
ืชืืืื ืืคืืชืื ืืืกืืืืช ืืืืฆืืจ? ืื ืืฉืชืืฉ ืืืืชื ืงืืืฅ ืขืืืจ
ืึทืฆึธืึธื? ืืืื, ืืืืคื ืืืื, ืื, ืืื ืขืืืจ ืืคืื ืงืฆืืื ืืืืช ืืื ืื ืื ื ืฆืจืืืื ืืช ืืืืจืื ืืืืื:
- ืืื ืืจืคืืืฆืื ืืฉืชื ืื: ืฉืืืืฉ ืืืฉืชื ื ืกืืืื ืขืืืจ ืืืง
ืขืจืืื ืืืฉืชื ืื ืืื ืกืืืื. - ืขืงืืคื ืฉื ืชืฆืืจื: ืืืืืช ืืืืืืจ ืฉื ืืื (ืื ืื
ืงืืืฅ ื ืืกืฃ ืขืืงื) docker-compose ืฉืืฉื ื ืืฉืื ืืืื
ืจืืฉืืช, ื-docker compose ืืืื ืืืืืื ืฉื ื ืืงืืฆืื.
ืืืืืื ืืื ืงืืฆื ืคืืชืื ืืืืฆืืจ
ืืืืื ืืคืืชืื, ืกืืืจ ืืื ืื ืฉืชืจืฆื ืืืืืง ืฉืื ืืืื ืืงืื
ืืื ืืืช. ืืฉื ืื, ืืืจื ืืื ื ืคื ืืืืกืื ืขื ืงืื ืืืงืืจ ืืืชืงื
ืืืื ืืืืื ืืื ืจืืฆื ืขืืืจ ืืืืฉืื ืฉืื. ืืื ืืกืืืืช ืืืฆืืจ
ืฉืืื ืื ืืื ื ืืชืืืื.
ืืืืฆืืจ, ืืฉ ืื ืืฉืืื ืขื ืฆืืชืื ืจืืื, ืืื ืคื ืืื ืืงืืื
ืืืืก ืืฆืืืช ืฉืขืืื ืคืืขื ืืืืืื (ืื ืืฉืืจืืช) ืฉืื, ืื ืืชื ืื ืขืืฉื ืืืช
ืืชื ืืืื ืืืขืืืช ืืช ืงืื ืืืงืืจ ืืื ืคืขืืืืช ืืืจืืืืช ืืืืืืืช
ืกื ืืจืื ืงืื, ืืืชืืช ืืื'.
ืืืงืื ืืืช, ืื ื ืืืจื ืืื ืจืืฆืื ืืืฆืืจ ืชืืื ื ืขื ืืจืกื ืกืคืฆืืคืืช ืฉื ืืงืื ืฉืื.
ื ืืื ืืกืื ืืชื ืืืชืืื (ืืคืฉืจ ืืืฉืชืืฉ ืืกืื ืืืงื
ื ืืืื ืืจืกืืืช ืื ืืขืจืืช ืืืจืช ืืคื ืฉืืงืื ืืขืชื).
ืืืืื ืชืฆืืจื
ืืืชืืฉื ืืืืืืื ืืฉืืชืืืช ืฉืื ืขืฉืืื ืืืืืช ืฉืื ื ืืชืจืืืฉืื
ืคืืชืื ืืืืฆืืจ, ืืจืืจ ืฉื ืฆืืจื ืงืืฆื ืชืฆืืจื ืฉืื ืื.
Docker compose ืชืืื ืืืืืื ืงืืฆื ืืืืืจ ืฉืื ืื
ืืืฉืื ืืช ืืชืฆืืจื ืืกืืคืืช. ืืื ืื ืขืืื ื ืืชื ืืจืืืช ืืืืืื:
$ 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
ืืืืืจ, docker compose ืชืืื ืืฉืืืื ืืืืืจืื ืืจืืืื -
ืงืืฆืื, ืื ืืืคืฉืจ ืื ืืขืงืืฃ ืคืจืืืจืื ืฉืื ืื ืืงืืืฅ ืืฉื ื. ืืืืืื:
$ 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 ืืืคืฉ ืืืืืืืืช ืงืืืฅ ืืืืื ืืฉื
docker-compose.override.yml ืืขืงืืฃ ืขืจืืื docker-compose.ym. ืื
ืฉื ื ืืช ืฉื ืืงืืืฅ ืืฉื ื, ืืชื ืืงืื ืืช ืืืชื ืชืืฆืื, ืจืง ืืืืฆืขืืช ืืคืงืืื ืืืงืืจืืช:
$ 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}
...
ืืื ืื ืื ืืืช docker-compose (ืื ืืืืคื) ืืื ืืฉืชื ื ืกืืืื
$MY_SERVICE_VERSION, ืืขืจื ืืฉืืฉ ืืืืจืืืืื ืื ืชืืืืจ
ืืขืจื ืฉื ืืฉืชื ื ืืกืืืื ืืคื ื ืืื ืืื, ืืื ืืฉืืฉ ืืขืช ืื ืืื ืื ืืืืคื
ืืคื ืงืก private.registry.mine.
ืืขืงืจืื ืืช ืฉืื
ืืืืฉืืช ืฉืขืืืืืช ืืฉืืืื ืขืฉืืืืช ืืขืืื ืื ืืฉืืืื. ืื ื ืขืืงื ืืืจ ืืื
ืืืืื ืคืฉืืืื:
- ืื ืืขืจืืืืช ืฉืื ืืืืฆืืจ, ืคืืชืื (ืื ืกืืืืืช ืืืจืืช) ืืืืืจืืช ืืจื
ืงืืฆื docker-compose - ืงืืฆื ืชืฆืืจื ืืืจืืฉืื ืืื ืืืกืืช ืืช ืื ืืกืืืืืช ืฉืื, ืืื ืืืคืฉืจ
ืืื ืืข ืืคืืืืช. - ืื ื ืฆืจืื ืคืงืืื ืืืช ืคืฉืืื ืืื ืืขืืื ืืื ืกืืืื.
- ืืชืฆืืจื ืืจืืฉืืช ืืืืืจืช ืืงืืืฅ docker-compose.ym.
- ืืฉืชื ื ืกืืืื ืืฉืืฉืื ืืืืืจืช ืชืื ืชืืื ื ืื ืืืจืื
ืืฉืชื ืื ืฉืขืฉืืืื ืืืฉืชื ืืช ืืกืืืื ืืกืืืื (ืืืืื, ืืื ืืืจืฆืื,
ืืคืงื). - ืืขืจืืื ืฉื ืืฉืชื ื ืืืฆืืจ ืืฉืืฉืื ืืขืจืืื ืขืืืจ
ืืืจืืจืช ืืืื, ืื ืืืืขืจ ืืช ืืกืืืื ืื ืื ืืขืจืืื ืืืฉืงืช ืืืืฆืืจ ืืื
ืืืืจ ืืฉืชื ื ืกืืืื. - ืืื ืืืคืขืื ืฉืืจืืช ืืกืืืืช ืืืฆืืจ, ืืฉืชืืฉ ืืคืงืืื docker stack deploy - ืืืืืจ-ืงืืืฅ docker-compose.yml -with-registry-auth-my-stack-name.
- ืกืืืืช ืืขืืืื ืืชืืืื ืืืืฆืขืืช ืืคืงืืื docker-compose ืืืขืื.
ืืืื ื ืกืชืื ืขื ืืืืื ืคืฉืืื.
# 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 (docker-compose up)ืืืคืขืื ืืช ืืขืจืืื ืคื ืืื
ืืฆื ืคืืชืื ืขื ืงืื ืืงืืจ ืืืชืงื /project/src.
ืื ื ืืืื ืืืฉืชืืฉ ืืืืชื ืงืืฆืื ืืืืฆืืจ! ืืื ื ืืืืื ืืืื ืืืฉืชืืฉ
ืืืชื ืงืืืฅ docker-compose.ym ืืืืืื. ืืื ืืืจืืื ืืช ืื ื
ืืืฆืืจ, ืื ื ืจืง ืฆืจืื ืืื ืืช ืืืฉืืื ืืช ืืชืืื ื ืขื ืชื ืืืืืจ ืืจืืฉ
ืืฉืื 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
ืืชืืฆืื ืืื, ืืฉืชืืฉื ื ืืฉื ื ืงืืฆื docker-compose ืฉืื ืื, ืืฉืจ ืืื
ื ืืชื ืืืฉืชืืฉ ืืชืฆืืจืืช ืืคืืืืช ืขืืืจ ืื ืกืืืื ืฉืืฉ ืื!
ืืืืืข ื ืืกืฃ ืขื ืืงืืจืก
ืืงืืจ: www.habr.com