ααΆαβααααααβααΆαβα
ααααβαααααααβαααβααΆαβαααα
αβαααα»αβααΆαβαααααΎαβααΎαβααΆαβα
αΆααβααααΎαβααααβαα·ααααΆ
Docker Compose ααΊααΆα§αααααααα’ααα
αΆααααα½ααααααΆαααααααΎαααΆαααΆα
ααα·ααααΆααααααΆααααααααααααΎαααα»ααααααα·ααΈααααα’αααα ααΆα’αα»ααααΆαα±ααα’αααααααα
αααΆαααΆαα»ααΈαα½αααααααααα·ααΈααααα’ααα αααααααΎααΆαααΆαααααααααααα
αααΆααααΆαα αα·αααΆαααααα
αααα»α
α―αααΆα
ααΆαα½αααΉαααΆααααααααα’α
α
ααααα
ααα»ααααααΎαααααΆααααααΆα’αααα’αΆα
ααααΎα―αααΆα docker-compose ααΌα
ααααΆαα
αααα»α
ααααΎαααΆαα’αα·αααααα αα·ααααα»αααα·ααΆααΆαααα·ααααα? α¬ααααΎα―αααΆαααΌα
ααααΆαααααΆαα
ααΆα? ααΆααΆααααααΎαααΆαα, ααΆα, ααα»αααααααααΆαααα»αααΆααααααΎαααααΌαααΆαααΌα
ααΆαααααα:
- α’ααα interpolationα ααααΎα’αααααα·ααααΆααααααΆαααα½αα
ααα½α
ααααααααααααΆααααααΌααα αααα»αααα·ααΆααΆαααΈαα½ααα - ααΆαααα·αααααΆαααααααα
ααΆααααααααα αααααααΆααααα»αααΆαααααααα·ααΆααΈ (α¬ααΆαα½αα
α―αααΆααααααΆααααααααα½αααα) docker-compose αααααΉαααααΆααααααΌαα’αααΈαα½αααΆααααααΉα
ααΆααααΌα α αΎα docker compose ααΉααααααααΆααΆααααα αΌαααααΆααα―αααΆαααΆααααΈαα
ααΆααα»αααααΆαααΆαα―αααΆαα’αα·αααααα αα·αααα·ααααα
αααα»αα’αα‘α»ααααααααΆαα’αα·αααααα α’αααααααααΆα
αααα·αα·αααααΎαααΆαααααΆααααααΌαααΌααα
αααα»α
αααααααΆβαα·αααααΆααα ααΎααααΈααααΎααΌα
αααα ααΆααααααΆααααα·αααα‘αααααααΆαααΌααααααααααΌαααΆαααααΆαα
αα»αααΊααααααααΆαααααααααααΎαααΆααααααΆαααααααα·ααΈααααα’αααα ααα»αααααααααΆααααα·ααΆααΆαααα·ααααα
αα·ααΈααΆααααααααααΊαα·αααααααα
αα
αααα»αααΆαααα·α α’αααααΆαα
ααααααααααΆαααααΆααααΆα
αααΎα α αΎαααα·ααΆαααΊαααα»ααααα»α
ααΆαααααα
ααΉαααααΆααααααα»αααΊαααααααα’ααα (α¬ααααΆαααα) αααα»αααααΎαααΆα ααΌα
ααααα’ααααα·αααααΎααα
α’αααα’αΆα
ααααααΌαααααααααααααΆαααααα·ααααα·ααΆααααα»αααααΆαααααα½ααααα
αΌα
ααΆαααααΎααααΆαααααααΌα αααααΆααα
αααα»ααα
αα·α ααΆααααααΆααΎαα
αααααααΎαααΌαααΆαααΆαα½αααΉαααααααΆααααΆααααααΌαααααα’αααα
ααΆααΆαααααΆαααααα»αααΆααααααΆααααΆαααααααΆααααααα (α’αααα’αΆα
ααααΎ semantic
αααα α¬ααααααααααααααααααΆαααΆαααααα
α
α·αααααααα’ααα)α
ααα·αααααΆαααααααα ααΆαααααααα
ααααα·αααΈααΆααα»αααααΆ αα·αααΆαα’αΆαααααααααα’αααα’αΆα
αα»αααααΆαα
αααα»αααααΆααΈαααΌ
ααΆαα’αα·αααααα αα·αααΆαααα·α ααΆα
αααΆααααΆααααΆααΎαααΉαααααΌαααΆαα―αααΆαααααααα
ααΆααααααααααααααααααΆα
Docker Compost ααΆααααααΆααααα
αΌαααααΆααΌαα―αααΆαααααααααααααΆαα
ααα½αααΆαααΆααααααα
α»ααααααα αααααααααΆααααΎαααΆαα’αΆα
ααΎαααΎααα
αααα»αα§ααΆα αααα
$ 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 Compos ααΆααααααΆαααααααΆααααα
αααΎα -
α―αααΆααααα’αα»ααααΆαα±ααα’αααααα·ααααααΆαααΆαααααααααααααα
αααα»αα―αααΆαααΈααΈαα α§ααΆα ααα:
$ 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 αααααααΎαα―αααΆααα·ααααααα α
ααΆαααααααααααααααα·
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
αα·αα’αΈαα ααΆααΆααααααΆααααα½αα αα αΆαα
Interpolation of Variables
ααΆααααα―αααΆαααααααα
ααΆαααααααα
α’ααα
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...
α αΎαααααα·αααΎα’αααααααΎ docker-compose build (α¬ push) αααααααΆαααΆααααααααα½αααα·ααααΆα
$MY_SERVICE_VERSION, αααααααΉαααααΌαααΆαααααΎ ααααΈαααα»αααα»ααααααααα·αααΎα’αααααααα
αααααααα’αααααα·ααααΆααα»ααααααΆαααα ααΆααΉαααααΌαααΆαααααΎαα
αααααΆαααα α¬αα»α
αα
α
α»αααααα private.registry.mine.
αααααΆααααααααααα»α
αα·ααΈααΆααααααααααΆαααααα·αααααΆααααααΆαααααα»αα’αΆα
ααααΎαααΆααααααΆααα’ααααααααα αααα»αααααΎααΆαααΆααααα
α
αααΆααααΆααααα
- αααααΆααα’αααααααααα»ααααααΆααααα·ααααα ααΆαα’αα·αααααα (α¬ααα·ααααΆααααααααα) ααααΌαααΆααααααααΆαααα
docker-αααα―αααΆα - α―αααΆαααααααα
ααΆαααααααααααααααΌαααΆαααΎααααΈααααααααααααα·ααααΆααααααααα»αααΆααα’ααααΆααααα’αΆα
ααααΎαα
ααΆαα
αααααΆαααΆαα ααααα - αααα»αααααΌαααΆαααΆααααααααΆααΆαααααα½α ααΎααααΈααααΎαααΆααααα»αααα·ααΆααΆαααΈαα½ααα
- ααΆαααααααα ααΆααααααααααααΆααααααΌαααΆαααααααα αααα»αα―αααΆα docker-compose.yml.
- α’αααααα·ααααΆαααααΌαααΆαααααΎααΎααααΈαααααααααΆαααΌαααΆαα¬ααααααααα
α’αααβαααβα’αΆα βαααααααα½αβααΈβααα·ααααΆαβαα½αβαα βααααααααΆαβαα½α (ααααΆααααΆα αααΆα ααααααβα
ααα·ααα)α - αααααααα’αααααα·αααααααααΌαααΆαααααΎααΆααααααααααΆαα
ααΆαααααΆαααΎα ααΆααΆαααααααα αΆαα·αααα±αααα·α αααα»α ααααα·αααΎαααααααΌαααΆαααΆααα±ααααααΎαααΆααααα»αααα·ααααααααααααΆα
αααααα’αααααα·ααααΆαα - ααΎααααΈα αΆααααααΎαααααΆαααααα αααα»αααα·ααΆααΆαααα·ααααα ααΌαααααΎααΆααααααααΆ ααΆαααΆαααααααΆαααα docker β ααα-α―αααΆα docker-compose.yml βwith-registry-auth my-stack-name.
- ααα·ααΆααΆαααΆαααΆαααααΌαααΆαα αΆααααααΎααααααααΎααΆααααααααΆ docker-compose -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
...
αααα»αα’αΆα
ααααΎ docker-compose (docker-compose up)ααΎααααΈααααΎαααΆαααα
ααααα’αα·ααααααααΆαα½αααΌαααααααααααΆααααααα
αααα»α / αααααα / 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
ααΆαααααα ααΎαααΆαααααΎα―αααΆα docker-compose ααΈααααααααααΆ ααααααααααΆα
ααΆαααααααα
ααΆαααααααααααα½αα’αΆα
ααααΌαααΆαααααΎαααααΆααααα·ααααΆαααΆαα½ααααα’αααααΆα!
ααααααααααααααα’αααΈαααααα·ααααΆ
ααααα: www.habr.com