Iwwersetzung vun der Podcast Transkriptioun virbereet an Erwaardung vum Start vum Cours
Docker Compose ass en erstaunlech Tool fir eng Aarbecht ze kreéieren
Ëmfeld fir de Stack benotzt an Ärer Applikatioun. Et erlaabt Iech ze definéieren
all Komponent vun Ärer Applikatioun, no enger kloer an einfacher Syntax an
Fichieren
Mat dem Advent vun
Stärekoup
Awer heescht dat datt Dir déiselwecht Docker-Compose Datei benotze kënnt
Entwécklungsprozess an am Produktiounsëmfeld? Oder benotzt déi selwecht Datei fir
inszenéieren? Gutt, am Allgemengen, jo, awer fir dës Funktionalitéit brauche mir déi folgend:
- Variabel Interpolatioun: benotzt Ëmweltvariablen fir e puer
Wäerter déi an all Ëmfeld änneren. - Konfiguratioun Iwwerschreiden: d'Fäegkeet fir eng zweet (oder all
eng aner spéider) docker-compose Datei déi eppes betreffend änneren
als éischt, an Docker compose këmmert sech ëm béid Dateien ze fusionéieren.
Differenzen tëscht Entwécklung a Produktiounsdateien
Wärend der Entwécklung wëllt Dir héchstwahrscheinlech Code Ännerungen iwwerpréiwen
Echtzäit. Fir dëst ze maachen, ass normalerweis de Volume mam Quellcode montéiert
Container deen Runtime fir Är Applikatioun enthält. Mä fir eng Produktioun Ëmfeld
Dës Method ass net gëeegent.
An der Produktioun hutt Dir e Stärekoup mat ville Wirbelen, an de Volume ass lokal
relativ zum Node op deem Äre Container (oder Service) leeft, sou datt Dir net
Dir kënnt de Quellcode montéieren ouni komplex Operatiounen déi enthalen
Code Synchroniséierung, Signaler, etc.
Amplaz wëlle mir normalerweis e Bild mat enger spezifescher Versioun vun Ärem Code erstellen.
Et ass üblech et mat dem passenden Tag ze markéieren (Dir kënnt semantesch benotzen
Versioun oder en anere System no Ärem Diskretioun).
Configuratioun Iwwerschreiden
Gitt d'Ënnerscheeder an datt Är Ofhängegkeeten an Szenarien ënnerscheeden kënnen
Entwécklung a Produktioun, ass et kloer datt mir verschidde Konfiguratiounsdateien brauchen.
Docker compose ënnerstëtzt d'Fusioun vu verschiddene compose Dateien op
kréien déi lescht Konfiguratioun. Wéi dëst funktionnéiert kann am Beispill gesi ginn:
$ 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
Wéi gesot, Docker compose ënnerstëtzt d'Kombinatioun vu multiple composes -
Dateien, dëst erlaabt Iech verschidde Parameteren an der zweeter Datei ze iwwerschreiden. Zum Beispill:
$ 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
Dës Syntax ass net ganz bequem während der Entwécklung, wann de Kommando
muss vill Mol gemaach ginn.
Glécklecherweis sicht docker compose automatesch no enger spezieller Datei genannt
docker-compose.override.yml Wäerter ze iwwerschreiden docker-compose.yml. Wann
ëmbenennen déi zweet Datei, kritt Dir datselwecht Resultat, nëmmen d'Original Kommando benotzt:
$ 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
Okay, dat ass méi einfach ze erënneren.
Interpolatioun vu Variablen
Konfiguratiounsdateien Ënnerstëtzung
Verännerlechen
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...
A wann Dir maacht docker-compose bauen (oder drécken) ouni Ëmfeld Variabel
$MY_SERVICE_VERSION, gëtt de Wäert benotzt läschtmee wann Dir setzt
de Wäert vun der Ëmweltvariabel virum Bau, et gëtt benotzt wann Dir baut oder dréckt
an de Register private.registry.mine.
Meng Prinzipien
D'Approche déi fir mech funktionnéiere kënnen och fir Iech funktionnéieren. Ech verfollegen dës
einfach Regelen:
- All meng Stacks fir Produktioun, Entwécklung (oder aner Ëmfeld) sinn duerch definéiert
docker-compose Dateien - Konfiguratiounsdateien néideg fir all meng Ëmfeld sou vill wéi méiglech ze decken
vermeiden Duplikatioun. - Ech brauch een einfache Kommando fir an all Ëmfeld ze schaffen.
- D'Haaptkonfiguratioun ass an der Datei definéiert docker-compose.yml.
- Ëmfeld Variablen gi benotzt fir Bildtags oder aner ze definéieren
Variabelen déi vun Ëmfeld zu Ëmfeld variéiere kënnen (Staging, Integratioun,
Produktioun). - D'Wäerter vun de Produktiounsvariablen ginn als Wäerter benotzt fir
par défaut miniméiert dëst d'Risiken wann de Stack ouni Produktioun lancéiert gëtt
setzen Ëmfeld Variabel. - Fir e Service an engem Produktiounsëmfeld ze starten, benotzt de Kommando docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
- D'Aarbechtsëmfeld gëtt mam Kommando gestart Docker-komponéiert op -d.
Loosst eis en einfacht Beispill kucken.
# 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
...
Ech kann benotzen docker-compose (docker-compose up)de Stack ze lafen an
Entwécklungsmodus mat Quellcode montéiert /project/src.
Ech kann déi selwecht Dateien an der Produktioun benotzen! An ech kéint definitiv benotzen
selwecht Fichier docker-compose.yml fir Inszenéierung. Fir dëst ze vergréisseren
Produktioun, Ech brauch just d'Bild mat engem virdefinéierten Tag ze bauen an ze schécken
an der CI Etapp:
export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push
An der Produktioun kann dëst mat de folgende Kommandoen lafen:
export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
A wann Dir datselwecht op der Bühn wëllt maachen, musst Dir just definéieren
Noutwendeg Ëmfeldvariablen fir am Staging Ëmfeld ze schaffen:
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
Als Resultat hu mir zwee verschidde Docker-Compose Dateien benotzt, déi ouni
Duplikat Konfiguratiounen kënne benotzt ginn fir all Ëmfeld déi Dir hutt!
Léiert méi iwwer de Cours
Source: will.com