Tulkojums no podcasta transkripcijas tika sagatavots pirms kursa sÄkuma

Docker Compose ir pÄrsteidzoÅ”s rÄ«ks darba vides izveidoÅ”anai
stakam, kas tiek izmantots jÅ«su lietojumprogrammÄ. Tas ļauj jums definÄt
katru jÅ«su lietojumprogrammas komponentu, sekojot skaidram un vienkÄrÅ”am sintaksim .
Ar parÄdīŔanos Å”os YAML failus var izmantot tieÅ”i ražoÅ”anas vidÄ, strÄdÄjot ar
klasteri .
Bet vai tas nozÄ«mÄ, ka jÅ«s varat izmantot to paÅ”u docker-compose failu
izstrÄdes procesÄ un ražoÅ”anas vidÄ? Vai izmantot Å”o paÅ”u failu
stagingam? Nu, kopumÄ ā jÄ, bet Å”Ädai funkcionalitÄtei mums ir nepiecieÅ”ams
- MainÄ«go interpolÄcija: vides mainÄ«go izmantoÅ”ana dažÄm
vÄrtÄ«bÄm, kas mainÄs katrÄ vidÄ. - KonfigurÄcijas pÄrrakstīŔana: iespÄja definÄt otro (vai jebkuru
citu sekojoÅ”u) docker-compose failu, kas kaut ko mainÄ«s attiecÄ«bÄ uz
pirmo, un docker compose parÅ«pÄsies par abu failu apvienoÅ”anu.
AtŔķirÄ«bas starp failiem izstrÄdei un ražoÅ”anai
IzstrÄdes laikÄ, visticamÄk, vÄlÄsities pÄrbaudÄ«t koda izmaiÅas
reÄllaikÄ. Tam parasti tiek montÄts oriÄ£inÄlÄ koda apjoms
tvertnÄ, kurÄ atrodas jÅ«su lietojumprogrammas izpildlaiks. Bet ražoÅ”anas vidÄ
Å”Äds veids nav piemÄrots.
RažoÅ”anÄ jums ir klasteris ar daudzÄm mezglÄm, un apjoms ir lokÄls attiecÄ«bÄ uz mezglu, kurÄ strÄdÄ jÅ«su tvertne (vai pakalpojums), tÄpÄc jÅ«s
nevarat montÄt oriÄ£inÄlo kodu bez sarežģītÄm operÄcijÄm, kas ietver
koda sinhronizÄciju, signÄlus utt.
TÄpÄc mÄs parasti vÄlamies izveidot attÄlu ar konkrÄtu jÅ«su koda versiju.
To parasti apzÄ«mÄ ar attiecÄ«gu tagu (var izmantot semantisko
versiju numurÄÅ”anu vai citu sistÄmu pÄc jÅ«su izvÄles).
KonfigurÄcijas pÄrrakstīŔana
Å emot vÄrÄ atŔķirÄ«bas un to, ka jÅ«su atkarÄ«bas var atŔķirties izstrÄdes un ražoÅ”anas scenÄrijos, ir skaidrs, ka mums bÅ«s nepiecieÅ”ami dažÄdi konfigurÄcijas faili.
Docker compose atbalsta dažÄdu compose-failu apvienoÅ”anu
galÄ«gÄs konfigurÄcijas iegūŔanai. KÄ tas darbojas, var redzÄt uz piemÄra:
Docker compose ŠæŠ¾Š“Š“ŠµŃŠ¶ŠøŠ²Š°ŠµŃ Š¾Š±ŃŠµŠ“инение ŃŠ°Š·Š»ŠøŃнŃŃ
compose-ŃŠ°Š¹Š»Š¾Š² ГлŃ
полŃŃŠµŠ½ŠøŃ Š¾ŠŗŠ¾Š½ŃŠ°ŃŠµŠ»ŃŠ½Š¾Š¹ ŠŗŠ¾Š½ŃŠøŠ³ŃŃŠ°ŃŠøŠø. ŠŠ°Šŗ ŃŃŠ¾ ŃŠ°Š±Š¾ŃŠ°ŠµŃ Š¼Š¾Š¶Š½Š¾ ŃŠ²ŠøŠ“еŃŃ Š½Š° ŠæŃŠøŠ¼ŠµŃе:
$ 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 |
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 0KÄ minÄts, docker compose atbalsta vairÄku composite failu apvienoÅ”anu,
kas ļauj pÄrrakstÄ«t dažÄdus parametrus otrajÄ failÄ. PiemÄram:
$ 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 |
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Å Äda sintakse nav ļoti Ärta izstrÄdÄ, kad komandu
bÅ«s nepiecieÅ”ams izpildÄ«t vairÄkas reizes.
Par laimi, docker compose automÄtiski meklÄ Ä«paÅ”u failu ar nosaukumu
docker-compose.override.yml lai pÄrrakstÄ«tu vÄrtÄ«bas. docker-compose.ymlTransakcija
PÄrdÄvÄjot otro failu, bÅ«s tÄds pats rezultÄts, tikai izmantojot sÄkotnÄjo komandu:
$ 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 |
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 0Labi, tÄ atcerÄties ir vieglÄk.
MainÄ«go interpolÄcija.
KonfigurÄcijas faili atbalsta un noklusÄjuma vÄrtÄ«bas. TÄtad jÅ«s varat izdarÄ«t sekojoÅ”o:
services:
my-service:
build:
context: .
image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...Un ja jÅ«s izpildÄt docker-compose build (vai push) bez apkÄrtÄjÄs vides mainÄ«gÄ
$MY_SERVICE_VERSION, tiks izmantota vÄrtÄ«ba latest, bet, ja jÅ«s iestatÄ«sit
apkÄrtÄjÄs vides mainÄ«gÄ vÄrtÄ«bu pirms bÅ«vÄÅ”anas, tÄ tiks izmantota bÅ«vÄÅ”anas vai augÅ”upielÄdes
reÄ£istrÄ private.registry.mine.
Mani principi
Mani Ärti pieejamie risinÄjumi var bÅ«t noderÄ«gi arÄ« jums. Es sekoju Å”iem
vienkÄrÅ”ajiem principiem:
- Visas manas steku konfigurÄcijas ražoÅ”anai, izstrÄdei (vai citiem vidÄm) tiek noteiktas, izmantojot
docker-compose failus. - KonfigurÄcijas faili, kas nepiecieÅ”ami, lai aptvertu visas manas vides, maksimÄli
izvairÄs no dublÄÅ”anÄs. - Man ir nepiecieÅ”ama viena vienkÄrÅ”a komanda, kas darbojas katrÄ vidÄ.
- PamatkonfigurÄcija tiek noteikta failÄ docker-compose.yml.
- Vides mainÄ«gie tiek izmantoti, lai noteiktu attÄlu tagus vai citas
mainÄ«gÄs, kas var atŔķirties no vides uz vidi (staging, integrÄcija,
ražoÅ”ana). - RažoÅ”anas mainÄ«go vÄrtÄ«bas tiek izmantotas kÄ noklusÄjuma vÄrtÄ«bas, lai
minimizÄtu riskus, ja steks tiek palaists ražoÅ”anÄ bez
iestatÄ«tas vides mainÄ«gÄ. - Lai palaistu servisu ražoÅ”anas vidÄ, tiek izmantota komanda docker stack deploy ā compose-file docker-compose.yml āwith-registry-auth my-stack-name.
- Darba vide tiek palaista ar komandu docker-compose up -d.
ApskatÄ«sim vienkÄrÅ”u piemÄru.
# 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}
...un
# 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
...Es varu izmantot docker-compose (docker-compose up), lai palaižotu steku
izstrÄdes režīmÄ ar avota kodu, kas montÄts /project/src.
Es varu izmantot tos paÅ”us failus ražoÅ”anÄ! Un es varÄtu izmantot tieÅ”i
tÄdu paÅ”u failu docker-compose.yml staging videi. Lai to izvietotu ražoÅ”anÄ, man vienkÄrÅ”i jÄuzbÅ«vÄ un jÄnosÅ«ta attÄls ar iepriekÅ”noteiktu tagu
CI posmÄ:
export MY_SERVICE_VERSION=1.2.3 docker-compose -f docker-compose.yml build docker-compose -f docker-compose.yml push
RažoÅ”anÄ to var palaist, izmantojot Å”Ädas komandas:export MY_SERVICE_VERSION=1.2.3 docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth
Un, ja vÄlaties darÄ«t to paÅ”u staging posmÄ, vienkÄrÅ”i jÄdefinÄnepiecieÅ”amie vides mainÄ«gie, lai strÄdÄtu staging vidÄ:
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
KopumÄ mÄs izmantojÄm divus atŔķirÄ«gus docker-compose failus, kas bezdublÄÅ”anas konfigurÄcijÄm var tikt izmantoti jebkurÄ jÅ«su vidÄ!
UzzinÄt vairÄk par kursu
Teorija un prakse ClickHouse izmantoÅ”anÄ reÄlÄs lietojumprogrammÄs. Aleksandrs Zaitsevs (2018.g.)
Avots: habr.com
