Traduzzione di a trascrizzione di u podcast preparata in anticipazione di l'iniziu di u corsu
Docker Compose hè un strumentu maravigghiusu per creà desktop
ambiente per a pila utilizata in a vostra applicazione. Permette di definisce
ogni cumpunente di a vostra applicazione, seguendu una sintassi chjara è simplice in
schedarii
Cù l'avventu di
cluster
Ma questu significa chì pudete aduprà u stessu schedariu docker-compose in
prucessu di sviluppu è ambiente di pruduzzione? O utilizate u listessu schedariu per
mise en scène ? Ebbè, in generale, sì, ma per tali funziunalità avemu bisognu di i seguenti:
- Interpolazione variabile: utilizendu variabili di l'ambiente per alcuni
valori chì cambianu in ogni ambiente. - Override di cunfigurazione: a capacità di definisce una seconda (o qualsiasi
un altru seguitu) docker-compose file chì cambierà qualcosa in quantu
u primu, è u docker compose hà da piglià cura di unisce i dui schedari.
Differenze trà i schedarii di sviluppu è di produzzione
Durante u sviluppu, probabilmente vulete verificà i cambiamenti di codice in
modu in tempu reale. Per fà questu, di solitu, u voluminu cù u codice fonte hè muntatu in
un containeru chì cuntene u runtime per a vostra applicazione. Ma per un ambiente di produzzione
stu modu ùn hè micca adattatu.
In a pruduzzione avete un cluster multi-node è u voluminu hè locale
relative à l'ospite chì u vostru cuntinuu (o serviziu) hè in esecuzione, cusì ùn avete micca
pudete muntà u codice fonte senza operazioni cumplessu, chì includenu
sincronizzazione di codice, signali, etc.
Invece, di solitu vulemu creà una maghjina cù una versione specifica di u vostru codice.
Hè abitudine di marcà cù u tag appropritatu (pudete aduprà semantica
versioning o un altru sistema di a vostra scelta).
Override di cunfigurazione
Dati i diffirenzii è chì e vostre dipendenze pò differisce in scenarii
sviluppu è pruduzzione, hè chjaru chì avemu bisognu di diversi schedarii di cunfigurazione.
Docker compose supporta a fusione di diversi fugliali di cumpusizioni à
uttene a cunfigurazione finale. Cumu funziona pò esse vistu in un esempiu:
$ 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
Comu dissi, docker compose supporta a fusione di più cumpusizioni-
i schedari, stu vi permette di annullà diverse opzioni in u sicondu schedariu. Per esempiu:
$ 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
Sta sintassi ùn hè micca assai còmuda in u prucessu di sviluppu, quandu u cumandamentu
deve esse fattu parechje volte.
Per furtuna, docker compose cerca automaticamente un schedariu speciale chjamatu
docker-compose.override.yml per annullà i valori docker-compose.yml... Sì
rinominate u sicondu schedariu, uttene u listessu risultatu, solu cù u cumandamentu originale:
$ 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
Va bè, hè più faciule da ricurdà.
Interpolazione Variabile
Supportu di i schedarii di cunfigurazione
variabili
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...
È si fate docker-compose build (o push) senza variabile d'ambiente
$MY_SERVICE_VERSION, u valore serà utilizatu ùltimama si mette
u valore di a variabile di l'ambiente prima di a custruzzione, serà utilizatu quandu custruisce o spinghje
per registrà privatu.registru.me.
I mo principii
Approcci chì sò convenienti per mè ponu esse utili per voi. Aghju seguitu questu
regule simplici:
- Tutti i mo stacks per a produzzione, u sviluppu (o altri ambienti) sò definiti attraversu
i schedarii docker-compose. - I schedarii di cunfigurazione necessarii per copre tutti i mo ambienti, max.
evitendu a duplicazione. - Aghju bisognu di un cumandamentu simplice per travaglià in ogni ambiente.
- A cunfigurazione principale hè definita in u schedariu docker-compose.yml.
- Variabili di l'ambiente sò usati per definisce e tag di l'imaghjini o altri
variabili chì ponu cambià da l'ambiente à l'ambiente (staging, integrazione,
pruduzzione). - I valori di variabili per a produzzione sò usati cum'è valori da
per difettu, questu minimizes i risichi s'è vo eseguite a pila in pruduzzione senza
stabilisce una variabile d'ambiente. - Per inizià un serviziu in un ambiente di produzzione, utilizate u cumandimu docker stack deploy - compose-file docker-compose.yml - cù-registry-auth my-stack-name.
- L'ambiente di travagliu hè cuminciatu cù u cumandamentu docker-compose up -d.
Fighjemu un esempiu simplice.
# 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
...
Puderaghju aduprà docker-compose (docker-compose up)per eseguisce a pila à
modu di sviluppu cù u codice fonte muntatu in /prughjettu/src.
Puderaghju aduprà i stessi schedari in a pruduzzione! È puderia aduprà esattamente
listessu schedariu docker-compose.yml per a messa in scena. Per espansione questu
pruduzzione, solu bisognu di custruisce è mandà l'imaghjini cù un tag predefinitu
à u stadiu CI:
export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push
In a pruduzzione, questu pò esse eseguitu cù i seguenti cumandamenti:
export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
È s'è vo vulete fà u listessu nant'à u palcuscenicu, basta à definisce
variabili di l'ambienti necessarii per travaglià in l'ambiente di staging:
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
Cum'è un risultatu, avemu usatu dui schedari differente docker-compose, chì, senza
cunfigurazioni duplicate ponu esse aduprate per qualsiasi di i vostri ambienti!
Sapete più nantu à u corsu
Source: www.habr.com