Iwe unogona ikozvino kuvaka Docker mifananidzo mune werf uchishandisa yakajairwa Dockerfile

Zvirinani kunonoka pane kusamboita. Kana kuti isu takapotsa taita chikanganiso chakakomba nekusave nerutsigiro rwenguva dzose Dockerfiles kuvaka mifananidzo yekushandisa.

Iwe unogona ikozvino kuvaka Docker mifananidzo mune werf uchishandisa yakajairwa Dockerfile

Tichataura nezvazvo werf -GitOps utility iyo inobatanidza neCI / CD system uye inopa manejimendi ehupenyu hwese hwekushandisa, inobvumira:

  • unganidza uye buritsa mifananidzo,
  • tumira zvikumbiro muKubernetes,
  • bvisa mifananidzo isina kushandiswa uchishandisa yakakosha marongero.


Huzivi hwepurojekiti ndeyekuunganidza maturusi epasi-chikamu mune imwechete yakabatana system inopa DevOps mainjiniya kutonga pamusoro pekushandisa. Kana zvichibvira, zviripo zvinoshandiswa (seHelm neDocker) zvinofanira kushandiswa. Kana pasina mhinduro kune dambudziko, tinogona kugadzira uye kutsigira zvese zvinodiwa kune izvi.

Kumashure: yako wega mufananidzo muunganidzi

Izvi ndizvo zvakaitika nemuunganidzi wemufananidzo muwerf: yakajairika Dockerfile yakanga isina kutikwanira. Kana iwe ukatarisa nekukurumidza nhoroondo yepurojekiti, dambudziko iri rakatoonekwa mushanduro dzekutanga dzewerf (zvino zvichiri inozivikanwa sedapp).

Tichiri kugadzira chishandiso chekuvaka zvikumbiro muDocker mifananidzo, takakurumidza kuona kuti Dockerfile yakanga isina kufanira isu kune mamwe mabasa chaiwo:

  1. Iko kudikanwa kwekuvaka akajairwa madiki mawebhu application zvinoenderana neinotevera chiyero chirongwa:
    • isa system-wide application zvinoenderana,
    • isa bundle remaraibhurari ekutsamira application,
    • unganidza assets,
    • uye zvinonyanya kukosha, gadziridza kodhi mumufananidzo nekukurumidza uye zvinobudirira.
  2. Kana shanduko dzichiitwa kumafaira eprojekiti, muvaki anofanira kukurumidza kugadzira dhizaini nekushandisa chigamba kune akachinja mafaera.
  3. Kana mamwe mafaera achinja, saka zvinodikanwa kuvakazve danho rinoenderana rinoenderana.

Nhasi muunganidzi wedu ane zvimwe zvakawanda zvingangoitika, asi izvi zvaive zvishuwo zvekutanga uye zvinokurudzira.

Kazhinji, tisina kufunga kaviri, takazvigadzirira mutauro wepurogiramu wataishandisa (ona pazasi) uye rova ​​​​nzira yekushandisa yavo DSL! Zvinoenderana nezvinangwa, zvakaitirwa kutsanangura maitiro egungano mumatanho uye kuona kutsamira kwematanho aya pamafaira. Uye akawedzera muunganidzi wake, iyo yakashandura DSL kuva chinangwa chekupedzisira - mufananidzo wakaungana. Pakutanga DSL yaive muRuby, asi se shanduko kuenda kuGolang - iyo gadziriso yemuunganidzi wedu yakatanga kutsanangurwa muYAML faira.

Iwe unogona ikozvino kuvaka Docker mifananidzo mune werf uchishandisa yakajairwa Dockerfile
Old config ye dapp muRuby

Iwe unogona ikozvino kuvaka Docker mifananidzo mune werf uchishandisa yakajairwa Dockerfile
Ikozvino gadziriso yewerf paYAML

Iyo nzira yemuunganidzi yakachinjawo nekufamba kwenguva. Pakutanga, isu takangogadzira yenguva pfupi Dockerfile panhunzi kubva pakumisikidzwa kwedu, tobva tatanga kumhanyisa mirairo yegungano mumidziyo yenguva pfupi uye kuzvipira.

NB: Parizvino, muunganidzi wedu, anoshanda neayo config (muYAML) uye anonzi Stapel muunganidzi, atogadzira kuita chishandiso chine simba. Tsanangudzo yaro yakadzama inokodzera zvinyorwa zvakasiyana, uye zvekutanga zvekutanga zvinogona kuwanikwa mukati zvinyorwa.

Kuziva dambudziko

Asi takaona, uye kwete pakarepo, kuti takanga takanganisa chimwe chete: isu hatina kuwedzera kugona gadzira mifananidzo kuburikidza neyakajairwa Dockerfile uye uvasanganise mune imwechete-yekupedzisira-yekupedzisira application manejimendi zvivakwa (kureva kuunganidza mifananidzo, kuendesa uye kuichenesa). Zvingaite sei kugadzira chishandiso chekuisa muKubernetes uye kusaita Dockerfile rutsigiro, i.e. nzira yakajairika yekutsanangura mifananidzo yemapurojekiti mazhinji?..

Panzvimbo pokupindura mubvunzo uyu, tinopa mhinduro. Ko kana iwe uchitova neDockerfile (kana seti yeDockerfiles) uye uchida kushandisa werf?

NB: Nenzira, sei iwe ungatoda kushandisa werf? Iwo maficha makuru anouya kune anotevera:

  • yakazara application manejimendi kutenderera kunosanganisira kuchenesa mufananidzo;
  • kugona kubata kuungana kwemifananidzo yakati wandei kamwechete kubva kune imwechete config;
  • Yakavandudzwa nzira yekuendesa kune Helm-inoenderana machati.

Rondedzero yakazara yavo inogona kuwanikwa pa peji yeprojekiti.

Saka, dai takambozvipira kunyora zvakare Dockerfile mune yedu config, ikozvino tichati nerufaro: "Rega werf kuvaka yako Dockerfiles!"

Nzira yekushandisa sei?

Kuitwa kuzere kwechinhu ichi kwakaonekwa mukuburitswa werf v1.0.3-beta.1. Nheyo yakajairika iri nyore: mushandisi anotsanangura nzira inoenda kune iripo Dockerfile mune werf config, uyezve anomhanyisa iwo murairo. werf build... uye ndizvozvo - werf ichaunganidza mufananidzo. Ngatitarisei muenzaniso usingaoneki.

Ngatizivise chinotevera Dockerfile mumudzi weprojekiti:

FROM ubuntu:18.04
RUN echo Building ...

Uye tichazivisa werf.yamliyo inoshandisa iyi Dockerfile:

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

Zvose! Ruboshwe mhanya werf build:

Iwe unogona ikozvino kuvaka Docker mifananidzo mune werf uchishandisa yakajairwa Dockerfile

Mukuwedzera, iwe unogona kuzivisa zvinotevera werf.yaml kuvaka mifananidzo yakati wandei kubva kwakasiyana Dockerfiles kamwechete:

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

Chekupedzisira, inotsigirawo kupfuudza mamwe ekuvaka paramita, senge --build-arg ΠΈ --add-host - kuburikidza ne werf config. Tsanangudzo yakazara yeDockerfile mufananidzo kumisikidzwa inowanikwa pa peji yezvinyorwa.

Sei kushanda?

Munguva yekuvaka maitiro, iyo yakajairwa cache yenzvimbo dzenzvimbo muDocker mabasa. Nekudaro, chakakosha ndechekuti werf zvakare inosanganisa Dockerfile kumisikidzwa mune yayo masisitimu. Izvi zvinorevei?

  1. Imwe neimwe mufananidzo wakavakwa kubva kuDockerfile une nhanho imwe inonzi dockerfile (unogona kuverenga zvakawanda nezve matanho ari muwerf pano).
  2. Yechikuva dockerfile werf inoverengera siginecha zvinoenderana nezviri mukati meiyo Dockerfile kumisikidzwa. Kana iyo Dockerfile kumisikidzwa yachinja, siginecha yedanho inoshanduka dockerfile uye werf inotanga kuvakwazve kweichi nhanho neiyo Dockerfile config. Kana siginicha ikasachinja, saka werf inotora mufananidzo kubva kune cache (zvimwe zvakawanda pamusoro pekushandiswa kwemasaini mu werf zvakatsanangurwa mukati report iyi).
  3. Tevere, iyo yakaunganidzwa mifananidzo inogona kuburitswa nemurairo werf publish (kana werf build-and-publish) uye shandisa iyo kuendesa kuKubernetes. Yakadhindwa mifananidzo kuDocker Registry ichacheneswa uchishandisa yakajairwa werf yekuchenesa maturusi, i.e. Mifananidzo yekare (yakakura kupfuura N mazuva), mifananidzo yakabatana neasipo Git mapazi, uye mamwe marongero anozocheneswa otomatiki.

Rumwe ruzivo nezve mapoinzi anotsanangurwa pano anogona kuwanikwa mune zvinyorwa:

Zvinyorwa uye zvidziviriro

1. URL yekunze haitsigirwe muADD

Parizvino haitsigirwe kushandisa URL yekunze mugwara ADD. Werf haisi kuzotanga kuvakazve kana sosi pane yakatsanangurwa URL yachinja. Tinoronga kuwedzera chikamu ichi munguva pfupi.

2. Iwe haugone kuwedzera .git kumufananidzo

Kazhinji kutaura, kuwedzera dhairekitori .git mumufananidzo - tsika yakaipa yakaipa uye heino chikonzero nei:

  1. kana .git inoramba iri mumufananidzo wekupedzisira, izvi zvinotyora mitemo 12 factor app: Sezvo mufananidzo wekupedzisira uchifanirwa kubatanidzwa kune imwechete kuzvipira, hazvifanirwe kuita git checkout kuita zvemapoto.
  2. .git inowedzera saizi yemufananidzo (iyo repository inogona kuve yakakura nekuda kwekuti mafaera makuru akambowedzerwa kwairi obva adzimwa). Saizi yemuti webasa unongobatanidzwa chete nechisungo chakasarudzika haibvi pane nhoroondo yekushanda muGit. Muchiitiko ichi, kuwedzera uye kubviswa kwakatevera .git kubva pamufananidzo wekupedzisira hazvishande: mufananidzo ucharamba uchiwana imwe yekuwedzera - iyi ndiyo mashandiro anoita Docker.
  3. Docker inogona kutanga kuvakazve kusingakoshi, kunyangwe kuzvipira kumwechete kuri kuvakwa, asi kubva kune akasiyana mabasa-miti. Semuenzaniso, GitLab inogadzira akaparadzana akaumbwa madhairekitori mukati /home/gitlab-runner/builds/HASH/[0-N]/yourproject apo parallel assembly inogoneswa. Iyo yekuwedzera reassembly ichave nekuda kwekuti dhairekitori .git yakasiyana mune dzakasiyana-siyana dzakaumbwa shanduro dzeiyo imwechete repository, kunyangwe iyo imwechete kuzvipira yakavakwa.

Pfungwa yekupedzisira inewo mhedzisiro kana uchishandisa werf. Werf inoda kuti cache yakavakirwa ivepo paunenge uchimhanyisa mimwe mirairo (semuenzaniso. werf deploy) Kana iyi mirairo ichimhanya, werf inoverengera masiginecha ematanho emifananidzo yakataurwa mukati werf.yaml, uye dzinofanira kunge dziri mudura regungano - zvikasadaro murairo hauzokwanisi kuramba uchishanda. Kana siginicha yedariro inoenderana nezviri mukati .git, tobva tawana cache isina kugadzikana kuchinja mune zvisina basa mafaera, uye werf haizokwanisi kuregerera kutarisisa kwakadaro (kuti uwane rumwe ruzivo, ona zvinyorwa).

Zvose kuwedzera mamwe mafaira anodiwa chete kuburikidza nemirayiridzo ADD chero ipi zvayo inowedzera kushanda uye kuvimbika kwezvakanyorwa Dockerfile, uye zvakare inovandudza kugadzikana kwecache yakaunganidzwa nekuda kweizvi Dockerfile, kune shanduko dzisina basa muGit.

Mugumisiro

Nzira yedu yekutanga yekunyora muvaki wedu pachedu zvinodiwa yaive yakaoma, yakatendeseka uye yakatwasuka: pachinzvimbo chekushandisa madondoro pamusoro peiyo yakajairwa Dockerfile, isu takanyora mhinduro yedu netsika syntax. Uye izvi zvaive nezvakanakira: iyo Stapel muunganidzi inobata nebasa rayo zvakakwana.

Nekudaro, mukunyora kwedu muvaki, takarasa kuona rutsigiro rweDockerfiles iripo. Chikanganiso ichi chagadziriswa, uye mune ramangwana tinoronga kugadzira rutsigiro rweDockerfile pamwe chete netsika yedu yeStapel muvaki wegungano rakagoverwa uye rekuungana uchishandisa Kubernetes (kureva kuungana kwevanomhanya mukati meKubernetes, sezvinoitwa mukaniko).

Saka, kana iwe ukaerekana uine akati wandei eDockerfiles akarara akatenderedza ... edza werf!

PS Rondedzero yezvinyorwa pamusoro wenyaya

Verenga zvakare mublog redu: "werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)".

Source: www.habr.com

Voeg