Docker Ukuqamba: ukusuka kuphuhliso ukuya kwimveliso

Uguqulo loshicilelo lwepodcast olulungiselelwe kulindelo lokuqalisa kwekhosi "Umlawuli weLinux"

Docker Ukuqamba: ukusuka kuphuhliso ukuya kwimveliso

IDocker Compose sisixhobo esimangalisayo sokwenza umsebenzi
indawo engqongileyo yesipaki esisetyenziswe kwisicelo sakho. Ikuvumela ukuba uchaze
icandelo ngalinye lesicelo sakho, kulandela i-syntax ecacileyo nelula kwi YAML-
iifayile
.

Ngokufika kwe idocker iqamba v3 ezi fayile ze-YAML zingasetyenziswa ngokuthe ngqo kwindawo yemveliso xa usebenza nazo
iqela Ibutho leDocker.

Kodwa ngaba oku kuthetha ukuba ungasebenzisa i-docker efanayo-yenza ifayile kuyo
inkqubo yophuhliso nakwimeko yemveliso? Okanye sebenzisa ifayile efanayo kwi
iqonga? Ewe, ngokubanzi, ewe, kodwa kulo msebenzi sidinga oku kulandelayo:

  • Uguqulo oluguquguqukayo: ukusetyenziswa kwezinto eziguquguqukayo zokusingqongileyo kwabanye
    amaxabiso atshintshayo kwindawo nganye.
  • Configuration override: ukukwazi ukuchaza umzuzwana (okanye nayiphi na
    enye ilandelayo) docker-qamba ifayile eya kutshintsha into malunga
    okokuqala, kwaye i-docker compose iya kukhathalela ukudibanisa zombini iifayile.

Umahluko phakathi kweefayile zophuhliso kunye nemveliso

Ngexesha lophuhliso, uya kufuna ukujonga utshintsho lwekhowudi ngaphakathi
Ixesha elilungile. Ukwenza oku, ngokuqhelekileyo ivolumu enekhowudi yomthombo ifakwe kuyo
isikhongozeli esinexesha lokusebenza kwisicelo sakho. Kodwa kwimeko yemveliso
Le ndlela ayifanelekanga.

Kwimveliso, une-cluster enama-nodes amaninzi, kunye nomthamo wendawo
ngokunxulumene node apho isikhongozeli sakho (okanye inkonzo) sisebenza, ukuze ungenzi
unganyusa ikhowudi yemvelaphi ngaphandle kwemisebenzi enzima equka
ungqamaniso lwekhowudi, imiqondiso, njl.

Endaweni yoko, sihlala sifuna ukwenza umfanekiso ngoguqulelo oluthile lwekhowudi yakho.
Kuyinto yesiko ukuyiphawula ngethegi efanelekileyo (ungasebenzisa i-semantic
uguqulelo okanye enye inkqubo ngokubona kwakho).

Uqwalaselo Ugqithiselo

Ngenxa yokungafani kunye nokuba ukuxhomekeka kwakho kunokwahluka kwiimeko
uphuhliso kunye nemveliso, kuyacaca ukuba siya kufuna iifayile zoqwalaselo ezahlukeneyo.

Ukuqamba iDocker ixhasa ukudibanisa iifayile zokuqamba ezahlukeneyo kuzo
fumana uqwalaselo lokugqibela. Oku kusebenza njani kunokubonwa kumzekelo:

$ 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

Njengoko bekutshiwo, ukuqamba i-docker ixhasa ukudibanisa ukuqamba okuninzi -
iifayile, oku kukuvumela ukuba ubhale ngaphezulu kweeparamitha ezahlukeneyo kwifayile yesibini. Umzekelo:

$ 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

Le syntax ayilunganga kakhulu ngexesha lophuhliso, xa umyalelo
kuya kufuneka kwenziwe amaxesha amaninzi.

Ngethamsanqa, idocker iqamba ngokuzenzekelayo ijonge ifayile ekhethekileyo ebizwa
docker-compose.override.yml ukubhala ngaphezulu amaxabiso docker-compose.yml. ukuba
qamba kwakhona ifayile yesibini, ufumana isiphumo esifanayo, usebenzisa kuphela umyalelo wokuqala:

$ 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

Kulungile, kulula ukuyikhumbula.

Ukutolikwa kweeGuquguquko

Inkxaso yeefayile zoqwalaselo ukutolikwa
ezahlukeneyo
kunye namaxabiso angagqibekanga. Oko kukuthi, unokwenza oku kulandelayo:

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

Kwaye ukuba wenza docker-qamba ukwakha (okanye ukutyhala) ngaphandle kokuguquguquka kokusingqongileyo
$MY_SERVICE_VERSION, ixabiso liya kusetyenziswa zakutshanjekodwa ukuba uyaseta
ixabiso lemeko-bume eguquguqukayo phambi kolwakhiwo, iya kusetyenziswa xa kusakhiwa okanye kutyhalwa
kwirejista yabucala.registry.mine.

Imigaqo yam

Iindlela ezisebenzayo kum zinokukusebenzela nawe. Ndilandela ezi
imithetho elula:

  • Zonke iimfumba zam zemveliso, uphuhliso (okanye ezinye iimeko) zichazwe
    docker-qamba iifayile
  • Iifayile zoqwalaselo ezifunekayo ukugquma yonke imeko-bume yam, kangangoko kunokwenzeka
    kuphephe ukuphindaphinda.
  • Ndifuna umyalelo omnye olula ukuze ndisebenze kwindawo nganye.
  • Uqwalaselo oluphambili luchazwe kwifayile docker-compose.yml.
  • Izinto eziguquguqukayo zokusingqongileyo zisetyenziselwa ukuchaza iithegi zemifanekiso okanye ezinye
    izinto ezahlukeneyo ezinokwahluka ukusuka kokusingqongileyo ukuya kokusingqongileyo (iqonga, indibaniselwano,
    imveliso).
  • Amaxabiso okuguquguquka kwemveliso asetyenziswa njengamaxabiso
    ngokungagqibekanga, oku kunciphisa imingcipheko ukuba isitakhi siqaliswa kwimveliso ngaphandle
    misela imo eguquguqukayo.
  • Ukuqala inkonzo kwindawo yemveliso, sebenzisa umyalelo docker stack deploy - qamba-ifayile docker-compose.yml -with-registry-auth my-stack-name.
  • Indawo yokusebenza iqalwa ngokusebenzisa umyalelo docker-qalisa -d.

Makhe sijonge umzekelo olula.

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

Ndingasebenzisa docker-compose (docker-compose up)ukuqhuba istaki ngaphakathi
imowudi yophuhliso enekhowudi yemvelaphi efakwe ngaphakathi /iprojekthi/src.

Ndingasebenzisa ezi fayile ezifanayo kwimveliso! Kwaye ngokuqinisekileyo ndingayisebenzisa
ifayile efanayo docker-compose.yml yomdlalo. Ukwandisa oku
imveliso, ndifuna nje ukwakha kwaye ndithumele umfanekiso kunye nethegi echazwe kwangaphambili
kwinqanaba leCI:

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

Kwimveliso, oku kungaqhutywa kusetyenziswa le miyalelo ilandelayo:

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

Kwaye ukuba ufuna ukwenza okufanayo eqongeni, kufuneka uchaze
izinto ezahlukeneyo zokusingqongileyo eziyimfuneko ekusebenzeni kwindawo yeqonga:

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

Ngenxa yoko, sisebenzise iifayile ezimbini ezahlukeneyo ze-docker, ngaphandle kwazo
Ulungelelwaniso oluphindwe kabini lunokusetyenziswa kuyo nayiphi na imeko-bume onayo!

Funda ngakumbi malunga nekhosi "Umlawuli weLinux"

umthombo: www.habr.com

Yongeza izimvo