Yanzu zaku iya gina hotunan Docker a cikin werf ta amfani da Dockerfile na yau da kullun

Gara a makara fiye da taba. Ko kuma ta yaya kusan mun yi babban kuskure ta rashin samun tallafi ga Dockerfiles na yau da kullun don gina hotunan aikace-aikacen.

Yanzu zaku iya gina hotunan Docker a cikin werf ta amfani da Dockerfile na yau da kullun

Zamuyi magana akai wuf - GitOps mai amfani wanda ke haɗawa tare da kowane tsarin CI / CD kuma yana ba da sarrafa duk tsarin rayuwar aikace-aikacen, yana ba da izini:

  • tattara da buga hotuna,
  • tura aikace-aikace a Kubernetes,
  • share hotunan da ba a yi amfani da su ba ta amfani da manufofi na musamman.


Falsafar aikin ita ce tattara ƙananan kayan aikin cikin tsari guda ɗaya wanda ke ba injiniyoyin DevOps iko akan aikace-aikace. Idan zai yiwu, ya kamata a yi amfani da abubuwan amfani da ke akwai (kamar Helm da Docker). Idan babu mafita ga matsala, za mu iya ƙirƙira da tallafawa duk abin da ya dace don wannan.

Fage: Mai tattara hoton ku

Wannan shine abin da ya faru da mai tattara hoto a cikin werf: Dockerfile na yau da kullun bai ishe mu ba. Idan ka yi sauri duba tarihin aikin, wannan matsala ta riga ta bayyana a farkon nau'in werf (sannan har yanzu aka sani da dapp).

Yayin ƙirƙirar kayan aiki don gina aikace-aikace cikin hotunan Docker, da sauri mun gane cewa Dockerfile bai dace da mu ba don wasu takamaiman ayyuka:

  1. Bukatar gina ƙananan aikace-aikacen gidan yanar gizo na yau da kullun bisa ga daidaitaccen tsari mai zuwa:
    • shigar da abubuwan dogaron aikace-aikacen gabaɗaya,
    • shigar da tarin ɗakunan karatu na dogaro da aikace-aikace,
    • tattara dukiya,
    • kuma mafi mahimmanci, sabunta lambar a cikin hoton da sauri da inganci.
  2. Lokacin da aka yi canje-canje ga fayilolin aikin, mai ginin dole ne ya ƙirƙiri sabon Layer da sauri ta amfani da faci ga fayilolin da aka canza.
  3. Idan wasu fayiloli sun canza, to ya zama dole don sake gina matakin dogara daidai.

A yau mai karɓar mu yana da wasu damammaki da yawa, amma waɗannan su ne sha'awa da buƙatun farko.

Gabaɗaya, ba tare da tunani sau biyu ba, mun yi amfani da yaren shirye-shiryen da muke amfani da su (duba ƙasa) kuma buga hanya don aiwatarwa ka DSL! Dangane da manufofin, an yi niyya ne don bayyana tsarin taro a matakai da kuma tantance dogaron waɗannan matakan akan fayiloli. Kuma ya cika shi mai tattara kansa, wanda ya juya DSL zuwa burin karshe - hoton da aka tattara. Da farko DSL yana cikin Ruby, amma kamar yadda canza zuwa Golang - an fara bayanin tsarin mai karɓar mu a cikin fayil ɗin YAML.

Yanzu zaku iya gina hotunan Docker a cikin werf ta amfani da Dockerfile na yau da kullun
Tsohon saitin dapp a cikin Ruby

Yanzu zaku iya gina hotunan Docker a cikin werf ta amfani da Dockerfile na yau da kullun
Saitin yanzu don werf akan YAML

Hakanan tsarin mai tarawa ya canza akan lokaci. Da farko, kawai mun ƙirƙiri Dockerfile na ɗan lokaci akan tashi daga tsarin mu, sannan muka fara aiwatar da umarnin taro a cikin kwantena na wucin gadi kuma muka aikata.

NB: A halin yanzu, mai karɓar mu, wanda ke aiki tare da tsarin kansa (a cikin YAML) kuma ana kiransa Stapel Collector, ya riga ya haɓaka zuwa kayan aiki mai ƙarfi. Cikakken bayaninsa ya cancanci labarai dabam dabam, kuma ana iya samun cikakkun bayanai a ciki takardun.

Sanin matsalar

Amma mun gane, kuma ba nan da nan ba, cewa mun yi kuskure ɗaya: ba mu ƙara iyawa ba gina hotuna ta hanyar daidaitaccen Dockerfile da kuma haɗa su cikin kayan aikin sarrafa aikace-aikacen ƙarshen-zuwa-ƙarshe (watau tattara hotuna, turawa da tsaftace su). Ta yaya zai yiwu a yi kayan aiki don turawa a Kubernetes kuma ba aiwatar da tallafin Dockerfile ba, i.e. daidaitaccen hanya don kwatanta hotuna don yawancin ayyuka?..

Maimakon amsa wannan tambayar, muna ba da mafita. Idan kun riga kuna da Dockerfile (ko saitin Dockerfiles) kuma kuna son amfani da werf?

NB: Af, me yasa har ma za ku so yin amfani da werf? Babban fasali sun sauko zuwa masu zuwa:

  • cikakken sake zagayowar gudanar da aikace-aikacen ciki har da tsabtace hoto;
  • da ikon sarrafa taro na hotuna da yawa a lokaci ɗaya daga saiti ɗaya;
  • Ingantattun tsarin tura aiki don sigogin Helm masu jituwa.

Ana iya samun ƙarin cikakken jerin su a shafi na aikin.

Don haka, idan a baya mun ba da tayin sake rubuta Dockerfile a cikin tsarin mu, yanzu za mu ce da farin ciki: "Bari werf gina Dockerfiles!"

Yaya za a yi amfani da su?

Cikakken aiwatar da wannan fasalin ya bayyana a cikin sakin Werf v1.0.3-beta.1. Ƙa'idar gaba ɗaya mai sauƙi ce: mai amfani yana ƙayyade hanyar zuwa Dockerfile data kasance a cikin tsarin werf, sannan yana gudanar da umarnin. werf build... kuma shi ke nan - werf zai tattara hoton. Bari mu kalli wani misali mai ma'ana.

Mu sanar da na gaba Dockerfile a cikin tushen aikin:

FROM ubuntu:18.04
RUN echo Building ...

Kuma za mu sanar werf.yamlwanda ke amfani da wannan Dockerfile:

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

Duka! Hagu gudu werf build:

Yanzu zaku iya gina hotunan Docker a cikin werf ta amfani da Dockerfile na yau da kullun

Bugu da kari, za ka iya ayyana wadannan werf.yaml don gina hotuna da yawa daga Dockerfiles daban-daban lokaci guda:

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

A ƙarshe, yana kuma goyan bayan wucewa ƙarin sigogin gini, kamar --build-arg и --add-host - ta hanyar werf config. Ana samun cikakken bayanin saitin hoton Dockerfile a takardun shafi.

Yaya ta yi aiki?

Yayin aikin ginawa, daidaitaccen cache na yadudduka na gida a cikin ayyukan Docker. Duk da haka, abin da yake da muhimmanci shi ne cewa zawo yana haɗa saitin Dockerfile cikin kayan aikin sa. Menene ma'anar wannan?

  1. Kowane hoto da aka gina daga Dockerfile ya ƙunshi mataki ɗaya da ake kira dockerfile (zaka iya karanta ƙarin game da matakan da ke cikin werf a nan).
  2. Domin mataki dockerfile werf yana ƙididdige sa hannu wanda ya dogara da abubuwan da ke cikin tsarin Dockerfile. Lokacin da saitin Dockerfile ya canza, sa hannun matakin yana canzawa dockerfile kuma werf ya fara sake gina wannan matakin tare da sabon saitin Dockerfile. Idan sa hannun bai canza ba, to werf yana ɗaukar hoto daga cache (ƙarin cikakkun bayanai game da amfani da sa hannu a cikin werf an bayyana su a ciki wannan rahoto).
  3. Na gaba, ana iya buga hotunan da aka tattara tare da umarnin werf publish (ko werf build-and-publish) da kuma amfani da shi don turawa zuwa Kubernetes. Hotunan da aka buga zuwa Docker Registry za a tsaftace su ta amfani da daidaitattun kayan aikin tsabtace werf, watau. Tsofaffin hotuna (mafi girma da kwanakin N), hotunan da ke da alaƙa da rassan Git da ba su wanzu, da sauran manufofin za a share su ta atomatik.

Ana iya samun ƙarin cikakkun bayanai game da abubuwan da aka bayyana a nan a cikin takaddun:

Bayanan kula da taka tsantsan

1. Ba a tallafawa URL na waje a cikin ADD

A halin yanzu ba a samun tallafi don amfani da URL na waje a cikin umarni ADD. Werf ba zai fara sake ginawa ba lokacin da albarkatun da ke takamaiman URL suka canza. Muna shirin ƙara wannan fasalin nan ba da jimawa ba.

2. Ba za ku iya ƙara .git zuwa hoton ba

Gabaɗaya magana, ƙara directory .git a cikin hoton - mummunar dabi'a kuma ga dalilin da ya sa:

  1. idan .git ya kasance a cikin hoton ƙarshe, wannan ya saba wa ka'idoji 12 Factor app: Tunda hoton ƙarshe dole ne a haɗa shi da ƙaddamarwa ɗaya, bai kamata a yi shi ba git checkout aikata sabani.
  2. .git yana ƙara girman hoton (majigin zai iya zama babba saboda gaskiyar cewa an ƙara manyan fayiloli zuwa gare shi sannan kuma an share su). Girman itacen aiki da ke da alaƙa da takamaiman alƙawarin ba zai dogara da tarihin ayyuka a Git ba. A wannan yanayin, ƙari da cirewa na gaba .git daga hoton ƙarshe ba zai yi aiki ba: hoton har yanzu zai sami ƙarin Layer - wannan shine yadda Docker ke aiki.
  3. Docker na iya fara sake ginawa ba dole ba, koda kuwa ana gina alƙawarin iri ɗaya, amma daga bishiyoyin aiki daban-daban. Misali, GitLab yana ƙirƙirar kundayen adireshi daban-daban a ciki /home/gitlab-runner/builds/HASH/[0-N]/yourproject lokacin da aka kunna layi ɗaya. Ƙarin sake haɗuwa zai kasance saboda gaskiyar cewa directory .git ya bambanta a cikin nau'ikan cloned daban-daban na ma'ajin ajiya iri ɗaya, ko da an gina alƙawarin iri ɗaya.

Batu na ƙarshe kuma yana da sakamako yayin amfani da werf. Werf yana buƙatar ginanniyar cache don kasancewa yayin gudanar da wasu umarni (misali. werf deploy). Lokacin da waɗannan umarni ke gudana, werf yana ƙididdige sa hannun mataki don hotunan da aka ƙayyade a ciki werf.yaml, kuma dole ne su kasance a cikin cache na taro - in ba haka ba umarnin ba zai iya ci gaba da aiki ba. Idan sa hannun matakin ya dogara da abun ciki .git, to muna samun cache wanda ba shi da kwanciyar hankali ga canje-canje a cikin fayilolin da ba su da mahimmanci, kuma werf ba zai iya gafartawa irin wannan kulawa ba (don ƙarin cikakkun bayanai, duba). takardun).

Gabaɗaya ƙara wasu mahimman fayiloli kawai ta hanyar umarnin ADD a kowane hali yana ƙara inganci da amincin rubuce-rubuce Dockerfile, kuma yana inganta kwanciyar hankali na cache da aka tattara don wannan Dockerfile, zuwa canje-canje marasa dacewa a Git.

Sakamakon

Hanyarmu ta farko don rubuta namu maginin don takamaiman buƙatu ta kasance mai wuya, gaskiya da madaidaiciya: maimakon yin amfani da ƙugiya a saman daidaitaccen Dockerfile, mun rubuta maganinmu tare da daidaitawar al'ada. Kuma wannan yana da fa'idodinsa: mai karɓar Stapel yana jure aikinsa daidai.

Koyaya, yayin aiwatar da rubuta namu magini, mun rasa ganin goyon bayan da ke akwai na Dockerfiles. Yanzu an gyara wannan aibi, kuma a nan gaba muna shirin haɓaka tallafin Dockerfile tare da maginin Stapel ɗinmu na al'ada don ginin da aka rarraba da kuma ginawa ta amfani da Kubernetes (watau ginawa a kan masu gudu a cikin Kubernetes, kamar yadda ake yi a kaniko).

Don haka, idan ba zato ba tsammani kuna da wasu Dockerfiles a kwance… gwada shi wuf!

PS Jerin takardu akan batun

Karanta kuma a cikin blog ɗinmu: “werf - kayan aikin mu na CI / CD a cikin Kubernetes (bayyani da rahoton bidiyo)".

source: www.habr.com

Add a comment