Docker Compose: no attīstības līdz ražoŔanai

Tulkojums no podcasta transkripcijas tika sagatavots pirms kursa sākuma Linux administrators

Docker Compose: no attīstības līdz ražoŔanai

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

Ar parādīŔanos docker compose v3 Å”os YAML failus var izmantot tieÅ”i ražoÅ”anas vidē, strādājot ar
klasteri Docker Swarm.

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 0

Kā 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 0

Labi, tā atcerēties ir vieglāk.

Mainīgo interpolācija.

Konfigurācijas faili atbalsta mainīgo
interpolāciju
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 bez

dublēŔ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.) Linux administrators

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster