Docker Compose: kuchokera ku chitukuko mpaka kupanga

Kumasulira kwa mawu a podcast okonzedwa poyembekezera kuyamba kwa maphunzirowa "Linux Administrator"

Docker Compose: kuchokera ku chitukuko mpaka kupanga

Docker Compose ndi chida chodabwitsa chopangira ntchito
chilengedwe cha mulu wogwiritsidwa ntchito mu pulogalamu yanu. Zimakuthandizani kuti mufotokoze
Chigawo chilichonse cha pulogalamu yanu, kutsatira mawu omveka bwino komanso osavuta YAML-
mafayilo
.

Ndi kudza docker kupanga v3 mafayilo awa a YAML atha kugwiritsidwa ntchito mwachindunji pamalo opangira mukamagwira nawo ntchito
gulu Gulu la Docker.

Koma kodi izi zikutanthauza kuti mutha kugwiritsa ntchito fayilo ya docker-compose yomweyi
njira yachitukuko ndi m'malo opanga? Kapena gwiritsani ntchito fayilo yomweyi
siteji? Chabwino, zambiri, inde, koma kuti izi zitheke, tikufuna zotsatirazi:

  • Kutanthauzira kosinthika: kugwiritsa ntchito zosintha zachilengedwe kwa ena
    zomwe zimasintha m'malo aliwonse.
  • Kusintha kosinthika: Kutha kufotokozera sekondi (kapena iliyonse
    wina wotsatira) docker-compose file yomwe ingasinthe china chake
    choyamba, ndipo docker compose idzasamalira kuphatikiza mafayilo onse awiri.

Kusiyana pakati pa mafayilo opanga ndi kupanga

Pachitukuko, mungafune kuwona kusintha kwa ma code mkati
pompopompo. Kuti muchite izi, nthawi zambiri voliyumu yokhala ndi code source imayikidwamo
chotengera chomwe chili ndi nthawi yoyendetsera ntchito yanu. Koma kwa malo opanga
Njirayi si yoyenera.

Popanga, muli ndi masango okhala ndi mfundo zambiri, ndipo voliyumu yake ndi yapafupi
zokhudzana ndi mfundo yomwe chidebe chanu (kapena ntchito) chikugwira ntchito, kuti musatero
mutha kuyika ma code source popanda zovuta zomwe zikuphatikiza
kalunzanitsidwe kodi, zizindikiro, etc.

M'malo mwake, nthawi zambiri timafuna kupanga chithunzi chokhala ndi mtundu wina wake wa khodi yanu.
Ndi chizolowezi kuilemba ndi tag yoyenera (mutha kugwiritsa ntchito semantic
kusintha kapena dongosolo lina mwakufuna kwanu).

Kusintha Kosintha

Chifukwa cha kusiyana ndi kuti kudalira kwanu kungakhale kosiyana muzochitika
chitukuko ndi kupanga, zikuwonekeratu kuti tidzafunika mafayilo osinthika osiyanasiyana.

Docker compose imathandizira kuphatikiza mafayilo osiyanasiyana opangira
pezani kasinthidwe komaliza. Momwe izi zimagwirira ntchito zitha kuwoneka mu chitsanzo:

$ 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

Monga tanena, kupanga kwa docker kumathandizira kuphatikiza zolemba zingapo -
mafayilo, izi zimakupatsani mwayi wopitilira magawo osiyanasiyana mufayilo yachiwiri. Mwachitsanzo:

$ 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

Izi syntax si yabwino kwambiri pa chitukuko, pamene lamulo
ziyenera kuchitika nthawi zambiri.

Mwamwayi, docker compose imangoyang'ana fayilo yapadera yotchedwa
docker-compose.override.yml kunyalanyaza makhalidwe makina oyimba.yml. ngati
tchulaninso fayilo yachiwiri, mumapeza zotsatira zomwezo, pogwiritsa ntchito lamulo loyambirira:

$ 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

Chabwino, ndizosavuta kukumbukira.

Kutanthauzira kwa Zosintha

Kuthandizira mafayilo osintha kumasulira
zosintha
ndi zokhazikika. Ndiko kuti, mukhoza kuchita zotsatirazi:

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

Ndipo ngati mutero docker-compose build (kapena kukankha) popanda kusintha kwa chilengedwe
$MY_SERVICE_VERSION, mtengowo udzagwiritsidwa ntchito atsopanokoma ngati mukhala
mtengo wa kusintha kwa chilengedwe chisanayambe kumanga, chidzagwiritsidwa ntchito pomanga kapena kukankhira
ku register payekha.registry.mine.

Mfundo zanga

Njira zomwe zimagwira ntchito kwa ine zingagwire ntchito kwa inunso. Ndimatsatira izi
malamulo osavuta:

  • Milu yanga yonse yopanga, chitukuko (kapena malo ena) amatanthauzidwa kudzera
    docker-pangani mafayilo
  • Mafayilo osinthika amafunikira kubisa malo anga onse, momwe ndingathere
    pewani kubwereza.
  • Ndikufuna lamulo limodzi losavuta kuti ndigwire ntchito pamalo aliwonse.
  • Kukonzekera kwakukulu kumatanthauzidwa mu fayilo makina oyimba.yml.
  • Zosintha zachilengedwe zimagwiritsidwa ntchito kutanthauzira ma tag azithunzi kapena zina
    zosintha zomwe zimatha kusiyanasiyana kutengera chilengedwe (kuphatikiza, kuphatikiza,
    kupanga).
  • Makhalidwe amitundu yopangira amagwiritsidwa ntchito ngati mtengo
    mwachisawawa, izi zimachepetsa zoopsa ngati stack imayambitsidwa mukupanga popanda
    khalani ndi kusintha kwa chilengedwe.
  • Kuti muyambe ntchito pamalo opangira, gwiritsani ntchito lamulo docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Malo ogwirira ntchito amayamba kugwiritsa ntchito lamulo kuyimbira -d.

Tiyeni tione chitsanzo chosavuta.

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

Ndikhoza kugwiritsa ntchito docker-compose (docker-compose up)kuyendetsa stack mkati
njira yachitukuko yokhala ndi code source yoyikidwamo /project/src.

Nditha kugwiritsa ntchito mafayilo omwewa popanga! Ndipo ine ndikhoza ndithudi ntchito
fayilo yomweyi makina oyimba.yml za siteji. Kuti muwonjezere izi
kupanga, ndikungofunika kupanga ndi kutumiza chithunzicho ndi tag yofotokozedwatu
pa CI stage:

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

Popanga, izi zitha kuyendetsedwa pogwiritsa ntchito malamulo awa:

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

Ndipo ngati mukufuna kuchita chimodzimodzi pa siteji, mumangofunika kufotokozera
Zosintha zofunikira zogwirira ntchito m'malo ochitira masewera:

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

Zotsatira zake, tidagwiritsa ntchito mafayilo awiri osiyana a docker-compose, omwe alibe
Zosintha zobwereza zitha kugwiritsidwa ntchito kumalo aliwonse omwe muli nawo!

Dziwani zambiri za maphunzirowa "Linux Administrator"

Source: www.habr.com

Kuwonjezera ndemanga