Traduzzjoni tat-traskrizzjoni tal-podcast ippreparata b'antiċipazzjoni tal-bidu tal-kors
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
fajls
Bil-miġja ta
cluster
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
varjabbli
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
Sors: www.habr.com