Docker Compose: da u sviluppu à a pruduzzione

Traduzzione di a trascrizzione di u podcast preparata in anticipazione di l'iniziu di u corsu "Amministratore Linux"

Docker Compose: da u sviluppu à a pruduzzione

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 YAML-
schedarii
.

Cù l'avventu di docker compose v3 sti schedari YAML pò ièssiri usatu direttamente in l 'ambienti pruduzzione, quandu u travagliu cù
cluster Sciame Docker.

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 interpolazione
variabili
è i valori predeterminati. Questu hè, pudete fà e seguenti:

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 "Amministratore Linux"

Source: www.habr.com

Add a comment