I-Docker Compose: kusuka ekuthuthukisweni kuya ekukhiqizeni

Ukuhunyushwa kokulotshiwe kwe-podcast okulungiselelwe kulindelwe ukuqala kwesifundo "I-Linux Administrator"

I-Docker Compose: kusuka ekuthuthukisweni kuya ekukhiqizeni

I-Docker Compose iyithuluzi elimangalisayo lokudala ukusebenza
indawo yesitaki esisetshenziswe kuhlelo lwakho lokusebenza. Ikuvumela ukuthi uchaze
ingxenye ngayinye yohlelo lwakho lokusebenza, kulandela i-syntax ecacile nelula ku YAML-
amafayela
.

Ngokufika kwe i-docker iqamba v3 lawa mafayela e-YAML angasetshenziswa ngokuqondile endaweni yokukhiqiza lapho usebenza nawo
iqoqo I-Docker Swarm.

Kodwa ingabe lokhu kusho ukuthi ungasebenzisa ifayela elifanayo le-docker-compose ku
inqubo yokuthuthukiswa kanye nendawo yokukhiqiza? Noma sebenzisa ifayela elifanayo le
isiteji? Yebo, ngokujwayelekile, yebo, kodwa kulokhu kusebenza sidinga okulandelayo:

  • Ukuhumusha okuguquguqukayo: ukusebenzisa okuguquguqukayo kwemvelo kwabanye
    amanani ashintshayo endaweni ngayinye.
  • Ukukhishwa kokucushwa: ikhono lokuchaza isekhondi (noma yimuphi
    elinye elalandelayo) ifayela le-docker-compose elizoshintsha okuthile mayelana
    okokuqala, futhi ukubhala kwe-docker kuzonakekela ukuhlanganisa womabili amafayela.

Umehluko phakathi kwamafayela okuthuthukiswa nawokukhiqiza

Ngesikhathi sokuthuthukiswa, cishe uzofuna ukuhlola izinguquko zekhodi
isikhathi sangempela. Ukwenza lokhu, ngokuvamile ivolumu enekhodi yomthombo ifakwa phakathi
isiqukathi esiqukethe isikhathi sokusebenza sohlelo lwakho lokusebenza. Kodwa endaweni yokukhiqiza
Le ndlela ayifanelekile.

Ekukhiqizeni, uneqoqo elinama-node amaningi, futhi ivolumu ingeyasendaweni
okuhlobene nendawo lapho isiqukathi sakho (noma isevisi) sisebenza khona, ukuze ungakwenzi
ungakwazi ukukhweza ikhodi yomthombo ngaphandle kokusebenza okuyinkimbinkimbi okuhlanganisa
ukuvumelanisa amakhodi, amasignali, njll.

Kunalokho, ngokuvamile sifuna ukudala isithombe esinenguqulo ethile yekhodi yakho.
Kuyinto evamile ukuyimaka ngethegi efanelekile (ungasebenzisa i-semantic
inguqulo noma olunye uhlelo ngokubona kwakho).

Ukukhipha Ukucushwa

Uma kubhekwa umehluko nokuthi ukuncika kwakho kungase kuhluke ezimweni
ukuthuthukiswa nokukhiqiza, kusobala ukuthi sizodinga amafayela ahlukene wokucushwa.

Ukuqamba kwe-Docker kusekela ukuhlanganisa amafayela ahlukene wokuqamba kuwo
thola ukucushwa kokugcina. Ukuthi lokhu kusebenza kanjani kungabonakala esibonelweni:

$ 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

Njengoba kushiwo, ukuqamba kwe-docker kusekela ukuhlanganisa ukuqamba okuningi -
amafayela, lokhu kukuvumela ukuthi ukhiphe imingcele ehlukahlukene kufayela lesibili. Ngokwesibonelo:

$ 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 ayilula kakhulu ngesikhathi sokuthuthukiswa, lapho umyalo
kuzomele kwenziwe izikhathi eziningi.

Ngenhlanhla, i-docker ibhala ngokuzenzakalelayo ibheka ifayela elikhethekile elibizwa
i-docker-compose.override.yml ukukhipha amanani docker-compose.yml. Uma
qamba kabusha ifayela lesibili, uthola umphumela ofanayo, usebenzisa umyalo wokuqala kuphela:

$ 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 ukukukhumbula.

Ukuhumusha Okuguquguqukayo

Ukusekelwa kwamafayela okumisa ukutolika
eziguquguqukayo
kanye namanani azenzakalelayo. Okusho ukuthi, ungenza okulandelayo:

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

Futhi uma wenza i-docker-compose ukwakha (noma ukusunduza) ngaphandle kokuguquguquka kwemvelo
$MY_SERVICE_VERSION, inani lizosetshenziswa zakamuvakodwa uma usetha
inani lokuguquguquka kwemvelo ngaphambi kokwakhiwa, lizosetshenziswa lapho kwakhiwa noma kuphushwa
kurejista okuyimfihlo.registry.mine.

Izimiso zami

Izindlela ezingisebenzelayo zingakusebenzela nawe. Ngilandela lezi
imithetho elula:

  • Zonke izitaki zami zokukhiqiza, ukuthuthukiswa (noma ezinye izindawo) zichazwa ngokuthi
    docker-compose amafayela
  • Amafayela okumisa ayadingeka ukumboza zonke izindawo zami, ngangokunokwenzeka
    gwema ukuphindaphinda.
  • Ngidinga umyalo owodwa olula ukuze ngisebenze endaweni ngayinye.
  • Ukucushwa okuyinhloko kuchazwe efayeleni docker-compose.yml.
  • Okuguquguqukayo kwemvelo kusetshenziselwa ukuchaza omaka bezithombe noma okunye
    izinto eziguquguqukayo ezingase zihluke ngokwendawo nendawo (isiteji, ukuhlanganiswa,
    ukukhiqiza).
  • Amanani okuguquguquka kokukhiqiza asetshenziswa njengamavelu e
    ngokuzenzakalelayo, lokhu kunciphisa ubungozi uma isitaki sethulwa ekukhiqizweni ngaphandle
    setha imvelo eguquguqukayo.
  • Ukuqala isevisi endaweni yokukhiqiza, sebenzisa umyalo i-docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Indawo yokusebenza iqalwa kusetshenziswa umyalo i-docker-qamba phezulu -d.

Ake sibheke isibonelo esilula.

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

Ngiyakwazi ukusebenzisa i-docker-compose (docker-compose up)ukufaka isitaki
imodi yokuthuthukisa enekhodi yomthombo efakwe phakathi /iphrojekthi/src.

Ngingasebenzisa lawa mafayela ekukhiqizeni! Futhi ngangingakwazi ukusebenzisa
ifayela elifanayo docker-compose.yml okwesiteji. Ukwandisa lokhu ku
ukukhiqizwa, ngidinga nje ukwakha futhi ngithumele isithombe ngethegi echazwe ngaphambilini
esigabeni se-CI:

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

Ekukhiqizeni, lokhu kungenziwa kusetshenziswa imiyalo elandelayo:

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

Futhi uma ufuna ukwenza okufanayo esiteji, udinga nje ukuchaza
Izinguquko ezidingekayo zendawo yokusebenza endaweni yesiteji:

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

Njengomphumela, sisebenzise amafayela amabili ahlukene we-docker-compose, ngaphandle kwawo
Ukucushwa okuyimpinda kungasetshenziswa kunoma iyiphi indawo onayo!

Funda kabanzi mayelana nesifundo "I-Linux Administrator"

Source: www.habr.com

Engeza amazwana