Tagad varat izveidot Docker attÄlus werf, izmantojot parasto Dockerfile
LabÄk vÄlÄk nekÄ nekad. Vai arÄ« to, kÄ mÄs gandrÄ«z pieļÄvÄm nopietnu kļūdu, neatbalstot parastos Dockerfiles, lai izveidotu lietojumprogrammu attÄlus.
MÄs runÄsim par werf ā GitOps utilÄ«ta, kas integrÄjas ar jebkuru CI/CD sistÄmu un nodroÅ”ina visa lietojumprogrammas dzÄ«ves cikla pÄrvaldÄ«bu, ļaujot:
vÄkt un publicÄt attÄlus,
izvietot lietojumprogrammas Kubernetes,
izdzÄsiet neizmantotos attÄlus, izmantojot Ä«paÅ”as politikas.
Projekta filozofija ir apkopot zema lÄ«meÅa rÄ«kus vienÄ vienotÄ sistÄmÄ, kas DevOps inženieriem ļauj kontrolÄt lietojumprogrammas. Ja iespÄjams, jÄizmanto esoÅ”Äs utilÄ«tas (piemÄram, Helm un Docker). Ja problÄmai nav risinÄjuma, varam izveidot un atbalstÄ«t visu nepiecieÅ”amo.
Fons: jÅ«su attÄlu kolekcionÄrs
TÄ notika ar attÄlu savÄcÄju werf: ar parasto Dockerfile mums nepietika. Ja paskatÄs Ätri projekta vÄsturÄ, Ŕī problÄma parÄdÄ«jÄs jau pirmajÄs werf versijÄs (tad vÄl pazÄ«stams kÄ dapp).
Veidojot rÄ«ku lietojumprogrammu veidoÅ”anai Docker attÄlos, mÄs Ätri sapratÄm, ka Dockerfile mums nav piemÄrots dažiem ļoti specifiskiem uzdevumiem:
NepiecieÅ”amÄ«ba veidot tipiskas mazas tÄ«mekļa lietojumprogrammas saskaÅÄ ar Å”Ädu standarta shÄmu:
instalÄt visas sistÄmas lietojumprogrammu atkarÄ«bas,
un pats galvenais, Ätri un efektÄ«vi atjauniniet attÄlÄ redzamo kodu.
Kad projekta failos tiek veiktas izmaiÅas, veidotÄjam Ätri jÄizveido jauns slÄnis, mainotajiem failiem uzliekot ielÄpu.
Ja daži faili ir mainījuŔies, ir nepiecieŔams atjaunot atbilstoŔo atkarīgo posmu.
MÅ«sdienÄs mÅ«su kolekcionÄram ir daudz citu iespÄju, taÄu tÄs bija sÄkotnÄjÄs vÄlmes un pamudinÄjumi.
KopumÄ, divreiz nedomÄjot, mÄs bruÅojÄmies ar izmantoto programmÄÅ”anas valodu (SkatÄ«t zemÄk) un dodieties uz Ä«stenoÅ”anas ceļu savs DSL! AtbilstoÅ”i mÄrÄ·iem bija paredzÄts aprakstÄ«t montÄžas procesu pa posmiem un noteikt Å”o posmu atkarÄ«bas no failiem. Un to papildinÄja savs kolekcionÄrs, kas DSL pÄrvÄrta par gala mÄrÄ·i ā samontÄtu attÄlu. SÄkumÄ DSL bija Ruby, bet kÄ pÄreja uz Golangu ā YAML failÄ sÄka aprakstÄ«t mÅ«su kolekcionÄra konfigurÄciju.
Veca dapp konfigurÄcija Ruby
PaÅ”reizÄjÄ werf konfigurÄcija vietnÄ YAML
Laika gaitÄ mainÄ«jÄs arÄ« kolektora mehÄnisms. SÄkumÄ mÄs vienkÄrÅ”i Ä£enerÄjÄm pagaidu Dockerfile, izmantojot mÅ«su konfigurÄciju, un pÄc tam sÄkÄm izpildÄ«t montÄžas instrukcijas pagaidu konteineros un veikt darbÄ«bu.
NB: Å obrÄ«d mÅ«su kolekcionÄrs, kas darbojas ar savu konfigurÄciju (YAML) un tiek saukts par Stapel kolektoru, jau ir izveidojies par diezgan jaudÄ«gu rÄ«ku. TÄs detalizÄtais apraksts ir pelnÄ«jis atseviŔķus rakstus, un pamata informÄciju var atrast dokumentÄcija.
ProblÄmas apzinÄÅ”anÄs
TaÄu mÄs sapratÄm, un ne uzreiz, ka esam pieļÄvuÅ”i vienu kļūdu: nepievienojÄm spÄju veidojiet attÄlus, izmantojot standarta Dockerfile un integrÄt tos tajÄ paÅ”Ä visaptveroÅ”ajÄ lietojumprogrammu pÄrvaldÄ«bas infrastruktÅ«rÄ (t.i., apkopot attÄlus, izvietot un notÄ«rÄ«t tos). KÄ varÄtu bÅ«t iespÄjams uztaisÄ«t rÄ«ku izvietoÅ”anai Kubernetes un neieviest Dockerfile atbalstu, t.i. standarta veids, kÄ aprakstÄ«t attÄlus lielÄkajai daļai projektu?
TÄ vietÄ, lai atbildÄtu uz Å”o jautÄjumu, mÄs piedÄvÄjam risinÄjumu. Ko darÄ«t, ja jums jau ir Dockerfile (vai Dockerfiles komplekts) un vÄlaties izmantot werf?
NB: Starp citu, kÄpÄc jÅ«s vispÄr vÄlaties izmantot werf? GalvenÄs funkcijas ir Å”Ädas:
pilns lietojumprogrammu pÄrvaldÄ«bas cikls, ieskaitot attÄla tÄ«rÄ«Å”anu;
iespÄja pÄrvaldÄ«t vairÄku attÄlu montÄžu vienlaikus no vienas konfigurÄcijas;
Uzlabots ar Helm saderīgu diagrammu izvietoŔanas process.
PilnÄ«gÄku to sarakstu var atrast vietnÄ projekta lapa.
TÄtad, ja agrÄk mÄs bÅ«tu piedÄvÄjuÅ”i pÄrrakstÄ«t Dockerfile savÄ konfigurÄcijÄ, tagad mÄs ar prieku teiksim: āÄ»aujiet werf veidot jÅ«su Dockerfiles!ā
KÄ lietot?
PilnÄ«ga Ŕīs funkcijas ievieÅ”ana parÄdÄ«jÄs laidienÄ werf v1.0.3-beta.1. VispÄrÄjais princips ir vienkÄrÅ”s: lietotÄjs norÄda ceļu uz esoÅ”u Dockerfile werf konfigurÄcijÄ un pÄc tam palaiž komandu werf build... un tas arÄ« viss - werf saliks attÄlu. ApskatÄ«sim abstraktu piemÄru.
IzziÅosim nÄkamo Dockerfile projekta saknÄ:
FROM ubuntu:18.04
RUN echo Building ...
Un mÄs paziÅosim werf.yamlkas to izmanto Dockerfile:
Visbeidzot, tas atbalsta arÄ« papildu bÅ«vÄÅ”anas parametru nodoÅ”anu, piemÄram, --build-arg Šø --add-host - izmantojot werf konfigurÄciju. Pilns Dockerfile attÄla konfigurÄcijas apraksts ir pieejams vietnÄ dokumentÄcijas lapa.
KÄ tas strÄdÄ?
BÅ«vÄÅ”anas procesÄ darbojas Docker vietÄjo slÄÅu standarta keÅ”atmiÅa. TomÄr svarÄ«gs ir arÄ« werf integrÄ Dockerfile konfigurÄciju savÄ infrastruktÅ«rÄ. Ko tas nozÄ«mÄ?
Katrs attÄls, kas izveidots no Dockerfile, sastÄv no viena posma, ko sauc dockerfile (vairÄk par to, kÄdi posmi ir werf Å”eit).
Uz skatuves dockerfile werf aprÄÄ·ina parakstu, kas ir atkarÄ«gs no Dockerfile konfigurÄcijas satura. Mainoties Dockerfile konfigurÄcijai, mainÄs stadijas paraksts dockerfile un werf uzsÄk Ŕī posma pÄrbÅ«vi ar jaunu Dockerfile konfigurÄciju. Ja paraksts nemainÄs, werf paÅem attÄlu no keÅ”atmiÅas (sÄ«kÄka informÄcija par parakstu izmantoÅ”anu werf tika aprakstÄ«ta Å”o ziÅojumu).
TÄlÄk apkopotos attÄlus var publicÄt ar komandu werf publish (Vai werf build-and-publish) un izmantojiet to izvietoÅ”anai Kubernetes. Docker reÄ£istrÄ publicÄtie attÄli tiks notÄ«rÄ«ti, izmantojot standarta werf tÄ«rÄ«Å”anas rÄ«kus, t.i. Vecie attÄli (vecÄki par N dienÄm), attÄli, kas saistÄ«ti ar neesoÅ”Äm Git filiÄlÄm, un citas politikas tiks automÄtiski notÄ«rÄ«tas.
SÄ«kÄka informÄcija par Å”eit aprakstÄ«tajiem punktiem ir atrodama dokumentÄcijÄ:
Ja .git paliek galÄ«gajÄ attÄlÄ, tas pÄrkÄpj principus 12 faktoru lietotne: tÄ kÄ galÄ«gajam attÄlam ir jÄbÅ«t saistÄ«tam ar vienu apÅemÅ”anos, to nevajadzÄtu izdarÄ«t git checkout patvaļīga apÅemÅ”anÄs.
.git palielina attÄla izmÄru (repozitorijs var bÅ«t liels, jo tam kÄdreiz tika pievienoti lieli faili un pÄc tam izdzÄsti). Darba koka lielums, kas saistÄ«ts tikai ar konkrÄtu apÅemÅ”anos, nebÅ«s atkarÄ«gs no Git darbÄ«bu vÄstures. Å ajÄ gadÄ«jumÄ pievienoÅ”ana un turpmÄka noÅemÅ”ana .git no gala attÄla nedarbosies: attÄls joprojÄm iegÅ«s papildu slÄni - Å”Ädi darbojas Docker.
Docker var uzsÄkt nevajadzÄ«gu pÄrbÅ«vi, pat ja tiek veidota viena un tÄ pati apÅemÅ”anÄs, bet no dažÄdiem darba kokiem. PiemÄram, GitLab izveido atseviŔķus klonÄtus direktorijus /home/gitlab-runner/builds/HASH/[0-N]/yourproject kad ir iespÄjota paralÄlÄ montÄža. Papildu montÄža bÅ«s saistÄ«ta ar to, ka direktorijÄ .git atŔķiras dažÄdÄs vienas un tÄs paÅ”as krÄtuves klonÄtÄs versijÄs, pat ja ir izveidota viena un tÄ pati commit.
PÄdÄjam punktam ir arÄ« sekas, lietojot werf. Werf pieprasa, lai, izpildot dažas komandas (piem., werf deploy). Kad Ŕīs komandas tiek izpildÄ«tas, werf aprÄÄ·ina stadijas parakstus attÄliem, kas norÄdÄ«ti werf.yaml, un tiem jÄbÅ«t montÄžas keÅ”atmiÅÄ - pretÄjÄ gadÄ«jumÄ komanda nevarÄs turpinÄt darbu. Ja skatuves paraksts ir atkarÄ«gs no satura .git, tad mÄs iegÅ«stam keÅ”atmiÅu, kas ir nestabila pret izmaiÅÄm neatbilstoÅ”ajos failos, un werf nevarÄs piedot Å”Ädu pÄrkÄpumu (sÄ«kÄku informÄciju sk. dokumentÄcija).
KopumÄ, pievienojot tikai noteiktus nepiecieÅ”amos failus caur instrukcijÄm ADD jebkurÄ gadÄ«jumÄ palielina rakstÄ«tÄ darba efektivitÄti un uzticamÄ«bu Dockerfile, kÄ arÄ« uzlabo Å”im nolÅ«kam savÄktÄs keÅ”atmiÅas stabilitÄti Dockerfile, uz nebÅ«tiskÄm izmaiÅÄm Git.
Kopsavilkums
MÅ«su sÄkotnÄjais ceļŔ, lai izveidotu savu veidotÄju konkrÄtÄm vajadzÄ«bÄm, bija grÅ«ts, godÄ«gs un vienkÄrÅ”s: tÄ vietÄ, lai izmantotu kruÄ·us papildus standarta Dockerfile, mÄs rakstÄ«jÄm savu risinÄjumu ar pielÄgotu sintaksi. Un tam bija savas priekÅ”rocÄ«bas: Stapel kolektors lieliski tiek galÄ ar savu uzdevumu.
TomÄr, rakstot savu veidotÄju, mÄs pazaudÄjÄm no redzesloka atbalstu esoÅ”ajiem Dockerfiles. Å is trÅ«kums tagad ir novÄrsts, un nÄkotnÄ mÄs plÄnojam izstrÄdÄt Dockerfile atbalstu kopÄ ar mÅ«su pielÄgoto Stapel veidotÄju izplatÄ«tai montÄžai un montÄžai, izmantojot Kubernetes (t.i., montÄžu uz sliedÄm Kubernetes iekÅ”pusÄ, kÄ tas tiek darÄ«ts kaniko).
TÄtad, ja pÄkÅ”Åi jums apkÄrt guļ pÄris Dockerfiles... izmÄÄ£iniet to werf!