Ikastaroaren hasierari begira prestatutako podcastaren transkripzioaren itzulpena
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
fitxategiak
-Ren etorrerarekin
kluster
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
aldagaiak
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
Iturria: www.habr.com