Docker Compose: garapenetik ekoizpenera

Ikastaroaren hasierari begira prestatutako podcastaren transkripzioaren itzulpena "Linux administratzailea"

Docker Compose: garapenetik ekoizpenera

Docker Compose mahaigaina sortzeko tresna harrigarria da
zure aplikazioan erabilitako pilarako ingurunea. Definitzeko aukera ematen du
zure aplikazioaren osagai guztiak, sintaxi argi eta sinple bati jarraituz YAML-
fitxategiak
.

-Ren etorrerarekin docker compose v3 YAML fitxategi hauek produkzio-ingurunean zuzenean erabil daitezke, lan egiten duzunean
kluster Docker swarm.

Baina horrek esan nahi du docker-compose fitxategi bera erabil dezakezula
garapen prozesua eta ekoizpen ingurunea? Edo erabili fitxategi bera
eszenaratzea? Beno, oro har, bai, baina funtzionaltasun hori lortzeko honako hau behar dugu:

  • Aldagaien interpolazioa: batzuentzat ingurune-aldagaiak erabiltzea
    ingurune bakoitzean aldatzen diren balioak.
  • Konfigurazioa gainidaztea: segundo bat (edo edozein
    beste jarraipen bat) zerbait aldatuko duen docker-compose fitxategia
    lehenengoa, eta docker compose arduratuko da bi fitxategiak batzeaz.

Garapen eta ekoizpen fitxategien arteko desberdintasunak

Garapenean zehar, ziurrenik, kodearen aldaketak egiaztatu nahi dituzu
denbora errealeko modua. Horretarako, normalean, iturburu kodea duen bolumena muntatzen da
zure aplikazioaren exekuzio-denbora duen edukiontzi bat. Baina ekoizpen ingurune baterako
modu hau ez da egokia.

Produkzioan nodo anitzeko kluster bat duzu eta bolumena lokala da
zure edukiontzia (edo zerbitzua) exekutatzen ari den ostalariarekiko, beraz, ez duzu
iturburu-kodea muntatu dezakezu eragiketa konplexurik gabe, besteak beste
kodearen sinkronizazioa, seinaleak, etab.

Horren ordez, normalean irudi bat sortu nahi dugu zure kodearen bertsio zehatz batekin.
Ohikoa da dagokion etiketarekin markatzea (semantikoa erabil dezakezu
bertsioa edo zuk aukeratutako beste sistema bat).

Konfigurazioa gainidaztea

Aldeak kontuan hartuta eta zure menpekotasunak agertokietan desberdinak izan daitezkeela
garapena eta ekoizpena, argi dago konfigurazio fitxategi desberdinak beharko ditugula.

Docker compose-k konposaketa-fitxategi desberdinak bateratzea onartzen du
lortu azken konfigurazioa. Nola funtzionatzen duen adibide batean ikus daiteke:

$ 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

Esan bezala, docker compose-k hainbat konposizio bateratzea onartzen du
fitxategiak, honek bigarren fitxategiko hainbat aukera gainidazteko aukera ematen du. Adibidez:

$ 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

Sintaxi hau ez da oso erosoa garapen prozesuan, komandoa denean
hainbat aldiz egin behar da.

Zorionez, docker compose izeneko fitxategi berezi bat bilatzen du automatikoki
docker-compose.override.yml balioak gainidazteko Docker-compose.yml. bada
izena aldatu bigarren fitxategiari, emaitza bera lortuko duzu, jatorrizko komandoa soilik erabiliz:

$ 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

Ados, errazago gogoratzen da.

Interpolazio aldakorra

Konfigurazio fitxategiak onartzen ditu interpolazioa
aldagaiak
eta balio lehenetsiak. Hau da, honako hau egin dezakezu:

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

Eta egiten baduzu docker-compose eraikitzea (edo bultza) ingurune aldagairik gabe
$MY_SERVICE_VERSION, balioa erabiliko da azkenbaina ezartzen baduzu
eraiki aurretik ingurune-aldagaiaren balioa, eraikitzean edo bultzatzean erabiliko da
izena emateko pribatua.erregistroa.nirea.

Nire printzipioak

Niretzat komenigarriak diren planteamenduak baliagarriak izan daitezke zuretzat. Honi jarraitzen diot
arau sinpleak:

  • Produkziorako, garapenerako (edo beste ingurune batzuetarako) nire pila guztiak honen bidez definitzen dira
    docker-compose fitxategiak.
  • Nire ingurune guztiak estaltzeko behar diren konfigurazio fitxategiak, gehienez.
    saihestu bikoizketak.
  • Komando sinple bat behar dut ingurune guztietan lan egiteko.
  • Konfigurazio nagusia fitxategian zehazten da Docker-compose.yml.
  • Ingurune-aldagaiak irudien etiketak edo bestelakoak definitzeko erabiltzen dira
    ingurune batetik bestera alda daitezkeen aldagaiak (eszenaratzea, integrazioa,
    ekoizpena).
  • Produkziorako aldagaien balioak balio gisa erabiltzen dira
    lehenespenez, horrek arriskuak murrizten ditu pila ekoizpenean gabe exekutatzen baduzu
    ezarri ingurune-aldagaia.
  • Produkzio ingurune batean zerbitzu bat abiarazteko, erabili komandoa docker stack deploy - compose-file docker-compose.yml - with-registry-auth my-stack-name.
  • Lan-ingurunea komandoarekin hasten da docker-compose -d.

Ikus dezagun adibide sinple bat.

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

Erabili dezaket docker-compose (docker-compose up)pila exekutatzeko
garapen modua iturburu-kodea muntatuta /proiektua/src.

Produkzioan fitxategi berdinak erabil ditzaket! Eta zehatz-mehatz erabili nezake
fitxategi bera Docker-compose.yml eszenaratzeko. Hau zabaltzeko
ekoizpena, irudia aurrez zehaztutako etiketa batekin eraiki eta bidali behar dut
CI fasean:

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

Produkzioan, honako komando hauekin exekutatu daiteke:

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

Eta oholtza gainean gauza bera egin nahi baduzu, zehaztu besterik ez duzu egin behar
Eszenatokian lan egiteko beharrezkoak diren ingurune-aldagaiak:

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

Ondorioz, bi docker-compose fitxategi ezberdin erabili ditugu, hauek gabe
konfigurazio bikoiztuak zure edozein ingurunetarako erabil daitezke!

Ikastaroari buruzko informazio gehiago "Linux administratzailea"

Iturria: www.habr.com

Gehitu iruzkin berria