Docker Compose: mill-iżvilupp sal-produzzjoni

Traduzzjoni tat-traskrizzjoni tal-podcast ippreparata b'antiċipazzjoni tal-bidu tal-kors "Amministratur tal-Linux"

Docker Compose: mill-iżvilupp sal-produzzjoni

Docker Compose hija għodda aqwa għall-ħolqien ta 'xogħol
ambjent għall-munzell użat fl-applikazzjoni tiegħek. Jippermettilek tiddefinixxi
kull komponent tal-applikazzjoni tiegħek, wara sintassi ċara u sempliċi fil YAML-
fajls
.

Bil-miġja ta docker compose v3 dawn il-fajls YAML jistgħu jintużaw direttament fl-ambjent tal-produzzjoni meta jaħdmu magħhom
cluster Docker swarm.

Imma dan ifisser li tista' tuża l-istess fajl docker-compose fi
proċess ta 'żvilupp u fl-ambjent tal-produzzjoni? Jew uża l-istess fajl għal
il-waqfien? Ukoll, b'mod ġenerali, iva, iżda għal din il-funzjonalità għandna bżonn dan li ġej:

  • Interpolazzjoni varjabbli: bl-użu ta 'varjabbli ambjentali għal xi wħud
    valuri li jinbidlu f’kull ambjent.
  • Konfigurazzjoni override: abbiltà li tiddefinixxi t-tieni (jew kwalunkwe
    ieħor sussegwenti) docker-compose fajl li se jbiddel xi ħaġa rigward
    l-ewwel, u docker compose se jieħu ħsieb li jgħaqqad iż-żewġ fajls.

Differenzi bejn fajls ta 'żvilupp u produzzjoni

Matul l-iżvilupp, x'aktarx trid tiċċekkja l-bidliet fil-kodiċi
ħin reali. Biex tagħmel dan, normalment il-volum bil-kodiċi tas-sors huwa mmuntat fih
kontenitur li fih runtime għall-applikazzjoni tiegħek. Iżda għal ambjent ta 'produzzjoni
Dan il-metodu mhuwiex adattat.

Fil-produzzjoni, għandek cluster b'ħafna nodi, u l-volum huwa lokali
relattiv għan-node li fuqu qed jaħdem il-kontenitur (jew is-servizz) tiegħek, sabiex ma tagħmilx
inti tista 'timmonta l-kodiċi tas-sors mingħajr operazzjonijiet kumplessi li jinkludu
sinkronizzazzjoni tal-kodiċi, sinjali, eċċ.

Minflok, normalment irridu noħolqu immaġni b'verżjoni speċifika tal-kodiċi tiegħek.
Hija drawwa li timmarkaha bit-tikketta xierqa (tista 'tuża semantika
verżjonijiet jew sistema oħra fid-diskrezzjoni tiegħek).

Konfigurazzjoni Override

Minħabba d-differenzi u li d-dipendenzi tiegħek jistgħu jvarjaw fix-xenarji
żvilupp u produzzjoni, huwa ċar li se jkollna bżonn fajls ta 'konfigurazzjoni differenti.

Docker compose jappoġġja l-għaqda ta 'fajls ta' komponiment differenti għal
tikseb il-konfigurazzjoni finali. Kif jaħdem dan jista' jidher fl-eżempju:

$ 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

Kif intqal, docker compose jappoġġja l-kombinazzjoni ta' komposti multipli -
fajls, dan jippermettilek li tegħleb diversi parametri fit-tieni fajl. Pereżempju:

$ 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

Din is-sintassi mhix konvenjenti ħafna waqt l-iżvilupp, meta l-kmand
jeħtieġ li jsir ħafna drabi.

Fortunatament, docker compose awtomatikament ifittex fajl speċjali msejjaħ
docker-compose.override.yml biex jissuperaw il-valuri docker-compose.yml. Jekk
semmi mill-ġdid it-tieni fajl, ikollok l-istess riżultat, billi tuża biss il-kmand oriġinali:

$ 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, huwa aktar faċli biex tiftakar.

Interpolazzjoni ta' Varjabbli

Appoġġ ta 'fajls ta' konfigurazzjoni interpolazzjoni
varjabbli
u valuri awtomatiċi. Jiġifieri, tista 'tagħmel dan li ġej:

services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...

U jekk tagħmel hekk docker-compose build (jew push) mingħajr varjabbli ambjentali
$MY_SERVICE_VERSION, il-valur se jintuża aħħarimma jekk tissettja
il-valur tal-varjabbli ambjentali qabel il-bini, se jintuża meta jibni jew timbotta
għar-reġistru privat.reġistru.mini.

Il-prinċipji tiegħi

L-approċċi li jaħdmu għalija jistgħu jaħdmu għalik ukoll. Jien insegwi dawn
regoli sempliċi:

  • Il-munzelli kollha tiegħi għall-produzzjoni, l-iżvilupp (jew ambjenti oħra) huma definiti permezz
    fajls docker-compose
  • Fajls ta 'konfigurazzjoni meħtieġa biex ikopru l-ambjenti kollha tiegħi, kemm jista' jkun
    tevita d-duplikazzjoni.
  • Għandi bżonn kmand wieħed sempliċi biex naħdem f'kull ambjent.
  • Il-konfigurazzjoni ewlenija hija definita fil-fajl docker-compose.yml.
  • Il-varjabbli ambjentali jintużaw biex jiddefinixxu tikketti tal-immaġni jew oħrajn
    varjabbli li jistgħu jvarjaw minn ambjent għal ambjent (stadji, integrazzjoni,
    produzzjoni).
  • Il-valuri tal-varjabbli tal-produzzjoni jintużaw bħala valuri għal
    awtomatikament, dan jimminimizza r-riskji jekk il-munzell jitnieda fil-produzzjoni mingħajr
    issettja varjabbli ambjentali.
  • Biex tibda servizz f'ambjent ta 'produzzjoni, uża l-kmand docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • L-ambjent tax-xogħol jinbeda bl-użu tal-kmand docker-compose up -d.

Ejja nħarsu lejn eżempju sempliċi.

# 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
...

Kapaċi nuża docker-compose (docker-compose up)biex tmexxi l-munzell ġewwa
modalità ta 'żvilupp bil-kodiċi tas-sors immuntat fi /project/src.

Nista' nuża dawn l-istess fajls fil-produzzjoni! U żgur li stajt nuża
l-istess fajl docker-compose.yml għall-waqfien. Biex tespandi dan għal
produzzjoni, għandi bżonn biss li nibni u nibgħat l-immaġni b'tikketta predefinita
fl-istadju CI:

export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push

Fil-produzzjoni, dan jista 'jitħaddem bl-użu tal-kmandi li ġejjin:

export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

U jekk trid tagħmel l-istess fuq il-palk, trid biss tiddefinixxi
varjabbli ambjentali meħtieġa għax-xogħol fl-ambjent tal-waqfien:

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

Bħala riżultat, użajna żewġ fajls docker-compose differenti, li mingħajr
Konfigurazzjonijiet duplikati jistgħu jintużaw għal kwalunkwe ambjent li għandek!

Tgħallem aktar dwar il-kors "Amministratur tal-Linux"

Sors: www.habr.com

Żid kumment