Ngoku unokwakha imifanekiso yeDocker kwi-werf usebenzisa iDockerfile eqhelekileyo

Kungcono ufike mva kunokuba ungezi. Okanye indlela esiphantse senze ngayo impazamo enkulu ngokungafumani nkxaso kwiiDockerfiles eziqhelekileyo zokwakha imifanekiso yesicelo.

Ngoku unokwakha imifanekiso yeDocker kwi-werf usebenzisa iDockerfile eqhelekileyo

Siza kuthetha ngayo i-werf -Isixhobo se-GitOps esidibanisa nayo nayiphi na inkqubo ye-CI/CD kwaye ibonelela ngolawulo lwalo lonke umjikelezo wobomi besicelo, ivumela:

  • qokelela kwaye upapashe imifanekiso,
  • sebenzisa izicelo kwi-Kubernetes,
  • cima imifanekiso engasetyenziswanga usebenzisa imigaqo-nkqubo ekhethekileyo.


Ifilosofi yeprojekthi kukuqokelela izixhobo ezikumgangatho ophantsi zibe yinkqubo enye edibeneyo enika iinjineli ze-DevOps ukulawula izicelo. Ukuba kunokwenzeka, izinto eziluncedo ezikhoyo (ezifana neHelm kunye neDocker) kufuneka zisetyenziswe. Ukuba akukho sisombululo kwingxaki, sinokwenza kwaye sixhase yonke into eyimfuneko kule nto.

Imvelaphi: umqokeleli wemifanekiso yakho

Oku kwenzeka ngomqokeleli wemifanekiso kwi-werf: i-Dockerfile eqhelekileyo yayinganelanga kuthi. Ukuba ujonga ngokukhawuleza kwimbali yeprojekthi, le ngxaki ivele kwiinguqulelo zokuqala ze-werf (ngoko eyaziwa ngokuba yi-dapp).

Ngelixa sisenza isixhobo sokwakha usetyenziso kwimifanekiso yeDocker, sikhawuleze saqonda ukuba iDockerfile ibingasifanelanga eminye imisebenzi ethile:

  1. Isidingo sokwakha usetyenziso oluncinci lwewebhu ngokwesikimu somgangatho olandelayo:
    • faka inkqubo yokuxhomekeka kwesicelo esibanzi,
    • fakela inyanda yokuxhomekeka kwesicelo kumathala eencwadi,
    • qokelela impahla,
    • kwaye okona kubaluleke kakhulu, hlaziya ikhowudi emfanekisweni ngokukhawuleza nangempumelelo.
  2. Xa utshintsho lwenziwa kwiifayile zeprojekthi, umakhi kufuneka enze ngokukhawuleza uluhlu olutsha ngokusebenzisa i-patch kwiifayile ezitshintshileyo.
  3. Ukuba iifayile ezithile zitshintshile, ngoko kuyimfuneko ukuphinda kwakhiwe isigaba esixhomekeke kuyo esihambelanayo.

Namhlanje umqokeleli wethu unamanye amaninzi anokwenzeka, kodwa le yayiyiminqweno yokuqala kunye nezibongozo.

Ngokubanzi, ngaphandle kokucinga kabini, sazixhobisa ngolwimi lwenkqubo esilusebenzisileyo (bona ngezantsi) kwaye ubethe indlela ukuphumeza eyakho iDSL! Ngokuhambelana neenjongo, bekujoliswe ekuchazeni inkqubo yendibano ngezigaba kunye nokumisela ukuxhomekeka kwezi zigaba kwiifayile. Kwaye yaphelelisa umqokeleli owakhe, eyajika i-DSL ibe yinjongo yokugqibela - umfanekiso odibeneyo. Ekuqaleni i-DSL yayiseRuby, kodwa njenge inguqu ukuya Golang - uqwalaselo lomqokeleli wethu luqale ukuchazwa kwifayile yeYAML.

Ngoku unokwakha imifanekiso yeDocker kwi-werf usebenzisa iDockerfile eqhelekileyo
Uqwalaselo oludala lwe-dapp kwiRuby

Ngoku unokwakha imifanekiso yeDocker kwi-werf usebenzisa iDockerfile eqhelekileyo
Ubumbeko lwangoku lwe-werf kwi-YAML

Indlela yomqokeleli nayo yatshintsha ngokuhamba kwexesha. Ekuqaleni, siye savelisa i-Dockerfile yethutyana kubhabho ukusuka kuqwalaselo lwethu, emva koko saqala ukuqhuba imiyalelo yendibano kwizikhongozeli zexeshana kwaye sizibophelele.

NB: Okwangoku, umqokeleli wethu, osebenza kunye noqwalaselo lwakhe (kwi-YAML) kwaye ubizwa ngokuba ngumqokeleli we-Stapel, sele ephuhlisiwe waba sisixhobo esinamandla. Inkcazo yayo ecacileyo ifanelwe ngamanqaku ahlukeneyo, kwaye iinkcukacha ezisisiseko zinokufumaneka amaxwebhu.

Ukuqonda ingxaki

Kodwa siye saqaphela, kwaye kungekhona ngokukhawuleza, ukuba senze impazamo enye: asizange songeze isakhono Yakha imifanekiso ngeDockerfile eqhelekileyo kwaye udibanise kwisiseko esifanayo solawulo lwesicelo sokugqibela (oko kukuthi ukuqokelela imifanekiso, ukuhambisa kunye nokucoca). Kunokwenzeka njani ukuba wenze isixhobo sokuthunyelwa kwi-Kubernetes kwaye ungayisebenzisi inkxaso ye-Dockerfile, okt. indlela esemgangathweni yokuchaza imifanekiso yeeprojekthi ezininzi?..

Endaweni yokuphendula lo mbuzo, sinikezela ngesisombululo. Kuthekani ukuba sele unayo iDockerfile (okanye iseti yeeDockerfiles) kwaye ufuna ukusebenzisa i-werf?

NB: Haybo kutheni uzofuna ukusebenzisa i-werf? Iimpawu eziphambili zehla koku kulandelayo:

  • umjikelo wolawulo olupheleleyo lwesicelo kubandakanya ukucocwa komfanekiso;
  • ukukwazi ukulawula indibano yemifanekiso emininzi ngexesha elinye ukusuka kuqwalaselo olunye;
  • Inkqubo yokusasazwa ephuculweyo yeetshathi ezihambelana neHelm.

Uluhlu olupheleleyo lwazo lunokufumaneka apha iphepha leprojekthi.

Ke, ukuba ngaphambili besiza kuphinda sibhale i-Dockerfile kuqwalaselo lwethu, ngoku siya kuthi ngovuyo: "Makhe i-Dockerfiles yakho!"

Ungayisebenzisa njani?

Ukuphunyezwa ngokupheleleyo kolu phawu kubonakale kukhupho i-werf v1.0.3-beta.1. Umgaqo jikelele ulula: umsebenzisi ukhankanya indlela eya kwiDockerfile esele ikhona kuqwalaselo lwewerf, kwaye ke uqhuba umyalelo. werf build... kwaye yiloo nto-i-werf iya kudibanisa umfanekiso. Makhe sijonge umzekelo ocacileyo.

Masibhengeze olandelayo Dockerfile kwingcambu yeprojekthi:

FROM ubuntu:18.04
RUN echo Building ...

Kwaye siya kubhengeza werf.yamlesebenzisa oku Dockerfile:

configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile

Konke! Khohlo ukubaleka werf build:

Ngoku unokwakha imifanekiso yeDocker kwi-werf usebenzisa iDockerfile eqhelekileyo

Ukongeza, unokubhengeza oku kulandelayo werf.yaml ukwakha imifanekiso emininzi kwiiDockerfiles ezahlukeneyo ngaxeshanye:

configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend

Okokugqibela, ikwaxhasa ukudlula iiparamitha zokwakha ezongezelelweyo, ezinje --build-arg ΠΈ --add-host - nge-werf config. Inkcazo epheleleyo yoqwalaselo lomfanekiso weDockerfile iyafumaneka iphepha loxwebhu.

Isebenza njani?

Ngexesha lenkqubo yokwakha, i-cache esemgangathweni yeeleyile zasekhaya kwimisebenzi yeDocker. Nangona kunjalo, into ebalulekileyo kukuba i-werf nayo idibanisa ubumbeko lweDockerfile kwisiseko sayo. Ithetha ntoni le nto?

  1. Umfanekiso ngamnye owakhiwe kwiDockerfile unenqanaba elinye elibizwa ngokuba dockerfile (unokufunda ngakumbi malunga nokuba zeziphi izigaba kwi-werf apha).
  2. Kwiqonga dockerfile i-werf ibala utyikityo oluxhomekeke kwimixholo yoqwalaselo lweDockerfile. Xa uqwalaselo lweDockerfile lutshintsha, utyikityo lweqonga luyatshintsha dockerfile kwaye i-werf iqalisa ulwakhiwo lweli nqanaba ngoqwalaselo olutsha lweDockerfile. Ukuba utyikityo alutshintshi, ngoko i-werf ithatha umfanekiso kwi-cache (iinkcukacha ezithe vetshe malunga nokusebenzisa imisayino kwi-werf zichazwe apha le ngxelo).
  3. Okulandelayo, imifanekiso eqokelelweyo ingapapashwa ngomyalelo werf publish (okanye werf build-and-publish) kwaye uyisebenzisele ukuthunyelwa kwi-Kubernetes. Imifanekiso epapashiweyo kwiRegistry yeDocker iya kucocwa kusetyenziswa izixhobo ezisemgangathweni zokucoca i-werf, okt. Imifanekiso emidala (emidala kuneentsuku ezi-N), imifanekiso eyayanyaniswa namasebe angekhoyo eGit, kunye neminye imigaqo-nkqubo iya kucocwa ngokuzenzekelayo.

Iinkcukacha ezithe vetshe malunga neengongoma ezichazwe apha zinokufumaneka kuxwebhu:

Amanqaku kunye nezilumkiso

1. I-URL yangaphandle ayixhaswanga kwi-ADD

Okwangoku ayixhaswanga ukusebenzisa i-URL yangaphandle kumyalelo ADD. I-Werf ayiyi kuqalisa ukwakha kwakhona xa uvimba kwi-URL echaziweyo utshintsha. Siceba ukongeza eli nqaku kungekudala.

2. Awukwazi ukongeza .git kumfanekiso

Ngokubanzi, ukongeza uvimba weefayili .git emfanekisweni - isenzo esibi esibi kwaye nantsi isizathu:

  1. ukuba .git uhlala kumfanekiso wokugqibela, oku kuphula imigaqo 12 factor app: Kuba umfanekiso wokugqibela kufuneka uqhagamshelwe kwisibophelelo esinye, akufuneki ukuba kwenzeke git checkout ukuzibophelela ngokungenasizathu.
  2. .git kwandisa ubungakanani bomfanekiso (uvimba unokuba mkhulu ngenxa yokuba iifayile ezinkulu ziye zongezwa kuyo kwaye zacinywa). Ubungakanani bomthi womsebenzi onxulumene kuphela nesibophelelo esithile abuyi kuxhomekeka kwimbali yokusebenza kwiGit. Kule meko, ukongezwa kunye nokususwa okulandelayo .git ukusuka kumfanekiso wokugqibela awuyi kusebenza: umfanekiso useza kufumana umaleko owongezelelweyo- yindlela iDocker esebenza ngayo.
  3. I-Docker inokuqalisa ukwakhiwa kwakhona ngokungeyomfuneko, nokuba isibophelelo esifanayo siyakhiwa, kodwa sisuka kwimithi eyahlukeneyo yomsebenzi. Umzekelo, i-GitLab yenza abalawuli abahlukeneyo abadibeneyo /home/gitlab-runner/builds/HASH/[0-N]/yourproject xa udibaniso olunxuseneyo luvuliwe. Ukudityaniswa kwakhona okungaphezulu kuya kuba ngenxa yokuba uvimba weefayili .git yahlukile kwiinguqulelo eziqingqiweyo zogcino olufanayo, nokuba isibophelelo esifanayo sakhiwe.

Inqaku lokugqibela lineziphumo xa usebenzisa i-werf. I-Werf ifuna i-cache eyakhelweyo ukuba ibekho xa uqhuba eminye imiyalelo (umz. werf deploy). Xa le miyalelo iqhuba, i-werf ibala utyikityo lweqonga lwemifanekiso echazwe kuyo werf.yaml, kwaye kufuneka babe kwi-cache yendibano - kungenjalo umyalelo awuyi kukwazi ukuqhubeka nokusebenza. Ukuba utyikityo lweqonga luxhomekeke kumxholo .git, emva koko sifumana i-cache engazinzanga kutshintsho kwiifayile ezingabalulekanga, kwaye i-werf ayiyi kuba nako ukuxolela ulongamelo olunjalo (ukufumana iinkcukacha ezingaphezulu, bona amaxwebhu).

Ngokubanzi ukongeza kuphela iifayile ezithile eziyimfuneko ngemiyalelo ADD kuyo nayiphi na imeko kwandisa ukusebenza kakuhle kunye nokuthembeka kokubhaliweyo Dockerfile, kunye nokuphucula ukuzinza kwe-cache eqokelelwe oku Dockerfile, kwiinguqu ezingabalulekanga kwiGit.

Isiphumo

Indlela yethu yokuqala yokubhala umakhi wethu kwiimfuno ezithile yayinzima, inyanisekile kwaye ithe ngqo: endaweni yokusebenzisa iintonga phezu kweDockerfile eqhelekileyo, sabhala isisombululo sethu nge-syntax yesiko. Kwaye oku kuneenzuzo zayo: umqokeleli weStapel uhlangabezana nomsebenzi wakhe ngokugqibeleleyo.

Nangona kunjalo, kwinkqubo yokubhala umakhi wethu, siye saphulukana nombono wenkxaso yeeDockerfiles ezikhoyo. Esi siphoso ngoku sele silungisiwe, kwaye kwixesha elizayo siceba ukuphuhlisa inkxaso ye-Dockerfile kunye nomakhi wethu we-Stapel yesiko lokusasazwa kolwakhiwo kunye nolwakhiwo olusebenzisa i-Kubernetes (okt ukwakha phezu kweembaleki ngaphakathi kwe-Kubernetes, njengoko kwenziwa kwi-kaniko).

Ke, ukuba ngequbuliso uneeDockerfiles ezimbalwa ezilele ngeenxa zonke... zama i-werf!

PS Uluhlu lwamaxwebhu ngesihloko

Funda nakwibhlog yethu: "i-werf - isixhobo sethu seCI / CD kwi-Kubernetes (umboniso kunye nengxelo yevidiyo)Β».

umthombo: www.habr.com

Yongeza izimvo