Tsopano mutha kupanga zithunzi za Docker mu werf pogwiritsa ntchito Dockerfile wamba

Kuliko mochedwa kuposa kale. Kapena momwe tidatsala pang'ono kulakwitsa kwambiri posakhala ndi chithandizo cha ma Dockerfiles okhazikika kuti apange zithunzi zamapulogalamu.

Tsopano mutha kupanga zithunzi za Docker mu werf pogwiritsa ntchito Dockerfile wamba

Tikambirana werf - Chida cha GitOps chomwe chimalumikizana ndi makina aliwonse a CI/CD ndikupereka kasamalidwe ka moyo wonse wogwiritsa ntchito, kulola:

  • sonkhanitsani ndi kufalitsa zithunzi,
  • tumizani mapulogalamu ku Kubernetes,
  • chotsani zithunzi zosagwiritsidwa ntchito pogwiritsa ntchito ndondomeko zapadera.


Lingaliro la pulojekitiyi ndikusonkhanitsa zida zotsika kukhala dongosolo limodzi logwirizana lomwe limapatsa mainjiniya a DevOps kuyang'anira ntchito. Ngati ndi kotheka, zida zomwe zilipo (monga Helm ndi Docker) ziyenera kugwiritsidwa ntchito. Ngati palibe njira yothetsera vuto, tikhoza kupanga ndi kuthandizira zonse zofunika pa izi.

Zoyambira: chojambulira zithunzi zanu

Izi ndi zomwe zidachitika ndi wosonkhanitsa zithunzi mu werf: Dockerfile wamba sizinali zokwanira kwa ife. Mukayang'ana mwachangu mbiri ya polojekitiyi, vutoli lidawonekera kale m'matembenuzidwe oyamba a werf (ndiye wotchedwa dapp).

Pomwe tikupanga chida chomangira mapulogalamu muzithunzi za Docker, tidazindikira mwachangu kuti Dockerfile sinali yoyenera kwa ife pantchito zina zapadera:

  1. Kufunika kopanga mapulogalamu ang'onoang'ono apa intaneti molingana ndi dongosolo ili:
    • kukhazikitsa zodalira pa system-wide application,
    • kukhazikitsa mtolo wa malaibulale odalira ntchito,
    • sonkhanitsa katundu,
    • ndipo chofunika kwambiri, sinthani kachidindo mu fano mwamsanga komanso moyenera.
  2. Zosintha zikapangidwa pamafayilo a polojekiti, womangayo ayenera kupanga msanga wosanjikiza watsopano pogwiritsa ntchito chigamba pamafayilo osinthidwa.
  3. Ngati mafayilo ena asintha, ndiye kuti ndikofunikira kumanganso gawo lolingana lomwe limadalira.

Masiku ano wosonkhanitsa wathu ali ndi zotheka zina zambiri, koma izi zinali zokhumba ndi zokhumba zoyambirira.

Nthawi zambiri, popanda kuganiza kawiri, tidadzikonzekeretsa ndi chilankhulo chomwe timagwiritsa ntchito (Onani pansipa) ndikupita kunjira yokonzekera DSL yake! Mogwirizana ndi zolingazo, cholinga chake chinali kufotokozera ndondomeko ya msonkhano mu magawo ndikuzindikira kudalira kwa magawowa pamafayilo. Ndipo anawonjezera izo wosonkhanitsa, yomwe idatembenuza DSL kukhala cholinga chomaliza - chithunzi chosonkhanitsidwa. Poyamba DSL inali ku Ruby, koma monga kupita ku Golang - masinthidwe a otolera athu adayamba kufotokozedwa mufayilo ya YAML.

Tsopano mutha kupanga zithunzi za Docker mu werf pogwiritsa ntchito Dockerfile wamba
Kukonzekera kwakale kwa dapp ku Ruby

Tsopano mutha kupanga zithunzi za Docker mu werf pogwiritsa ntchito Dockerfile wamba
Kukonzekera kwakali pano kwa werf pa YAML

Njira ya osonkhanitsa inasinthanso pakapita nthawi. Poyamba, tidangopanga Dockerfile kwakanthawi pa ntchentche kuchokera pamasinthidwe athu, kenako tidayamba kutsatira malangizo amsonkhano muzotengera kwakanthawi ndikudzipereka.

NB: Pakadali pano, wokhometsa wathu, yemwe amagwira ntchito ndi kasinthidwe kake (mu YAML) ndipo amatchedwa wosonkhanitsa Stapel, wapanga kale chida champhamvu kwambiri. Kufotokozera kwake mwatsatanetsatane kumayenera zolemba zosiyana, ndipo zambiri zoyambira zitha kupezekamo zolemba.

Kudziwa za vuto

Koma tinazindikira, osati nthawi yomweyo, kuti tinalakwitsa chimodzi: sitinawonjezere luso pangani zithunzi kudzera pa Dockerfile wamba ndikuwaphatikizira muzothandizira zoyendetsera ntchito zomaliza mpaka kumapeto (mwachitsanzo, sonkhanitsani zithunzi, tumizani ndikuziyeretsa). Zingatheke bwanji kupanga chida chotumizira ku Kubernetes osagwiritsa ntchito thandizo la Dockerfile, i.e. njira yokhazikika yofotokozera zithunzi zama projekiti ambiri?..

M'malo moyankha funsoli, timapereka yankho. Bwanji ngati muli ndi kale Dockerfile (kapena seti ya Dockerfiles) ndipo mukufuna kugwiritsa ntchito werf?

NB: Mwa njira, bwanji mukufuna kugwiritsa ntchito werf? Zinthu zazikuluzikulu zimatsikira ku izi:

  • kasamalidwe kwathunthu kasamalidwe ka ntchito kuphatikiza kuyeretsa zithunzi;
  • Kutha kuyang'anira kusonkhana kwa zithunzi zingapo nthawi imodzi kuchokera pakusintha kamodzi;
  • Kupititsa patsogolo njira yotumizira ma chart ogwirizana ndi Helm.

Mndandanda wathunthu wa iwo umapezeka pa tsamba la polojekiti.

Chifukwa chake, ngati m'mbuyomu tikadadzipereka kuti tilembenso Dockerfile mu kasinthidwe kathu, tsopano tinena mosangalala kuti: "Tiloleni timange ma Dockerfiles anu!"

Kodi mungagwiritse ntchito bwanji?

Kukhazikitsa kwathunthu kwa gawoli kudawonekera pakutulutsidwa werf v1.0.3-beta.1. Mfundo yayikulu ndi yosavuta: wogwiritsa ntchito amatchula njira yopita ku Dockerfile yomwe ilipo mu werf config, ndiyeno amayendetsa lamulo. werf build... ndipo ndizomwezo - werf adzasonkhanitsa chithunzicho. Tiyeni tione chitsanzo chosamvetsetseka.

Tiyeni tilengeze lotsatira Dockerfile muzu wa polojekiti:

FROM ubuntu:18.04
RUN echo Building ...

Ndipo tidzalengeza werf.yamlzomwe zimagwiritsa ntchito izi Dockerfile:

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

Zonse! Kumanzere thamanga werf build:

Tsopano mutha kupanga zithunzi za Docker mu werf pogwiritsa ntchito Dockerfile wamba

Komanso, mukhoza kulengeza zotsatirazi werf.yaml kuti mupange zithunzi zingapo kuchokera ku ma Dockerfiles osiyanasiyana nthawi imodzi:

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

Pomaliza, imathandiziranso kudutsa magawo ena omanga, monga --build-arg ΠΈ --add-host - kudzera pa werf config. Kufotokozera kwathunthu kwa kasinthidwe kazithunzi za Dockerfile kulipo zolembedwa tsamba.

Kodi ntchito?

Panthawi yomanga, chosungira chokhazikika cha zigawo zakomweko mu Docker zimagwira ntchito. Komabe, chofunikira ndikuti werf nawonso imaphatikiza kasinthidwe ka Dockerfile muzomangamanga zake. Kodi izi zikutanthauza chiyani?

  1. Chithunzi chilichonse chopangidwa kuchokera ku Dockerfile chimakhala ndi gawo limodzi lotchedwa dockerfile (mutha kuwerenga zambiri za magawo omwe ali mu werf apa).
  2. Kwa siteji dockerfile werf amawerengera siginecha yomwe imadalira zomwe zili mu Dockerfile kasinthidwe. Kusintha kwa Dockerfile kukasintha, siginecha ya siteji imasintha dockerfile ndipo werf imayambitsa kumangidwanso kwa gawoli ndi Dockerfile config. Ngati siginecha sikusintha, ndiye kuti werf amatenga chithunzicho kuchokera ku cache (zambiri zakugwiritsa ntchito siginecha mu werf zidafotokozedwa mu lipoti ili).
  3. Kenako, zithunzi zosonkhanitsidwa zitha kusindikizidwa ndi lamulo werf publish (kapena werf build-and-publish) ndikuigwiritsa ntchito kuti itumizidwe ku Kubernetes. Zithunzi zosindikizidwa ku Docker Registry zidzatsukidwa pogwiritsa ntchito zida zoyeretsera werf, mwachitsanzo. Zithunzi zakale (zakale kuposa masiku a N), zithunzi zolumikizidwa ndi nthambi za Git zomwe palibe, ndi mfundo zina zidzayeretsedwa zokha.

Zambiri zokhudzana ndi mfundo zomwe zafotokozedwa apa zitha kupezeka muzolemba:

Mfundo ndi njira zodzitetezera

1. Ulalo wakunja sugwiritsidwa ntchito mu ADD

Pakadali pano sikugwiritsiridwa ntchito kugwiritsa ntchito ulalo wakunja mu malangizo ADD. Werf sangayambitsenso kumanganso pomwe gwero la URL lomwe latchulidwa likusintha. Tikukonzekera kuwonjezera gawoli posachedwa.

2. Simungathe kuwonjezera .git ku chithunzicho

Nthawi zambiri, kuwonjezera chikwatu .git m'chithunzichi - mchitidwe woyipa woyipa ndipo ndichifukwa chake:

  1. ngati .git imakhalabe m'chifaniziro chomaliza, izi zikuphwanya mfundo 12 factor app: Popeza chithunzi chomaliza chiyenera kulumikizidwa ndi kudzipereka kumodzi, sikuyenera kutero git checkout kudzipereka mwachisawawa.
  2. .git kumawonjezera kukula kwa chithunzicho (chosungiracho chikhoza kukhala chachikulu chifukwa chakuti mafayilo akuluakulu adawonjezedwapo ndikuchotsedwa). Kukula kwa mtengo wantchito wolumikizidwa kokha ndi ntchito inayake sikudalira mbiri ya ntchito ku Git. Pankhaniyi, kuwonjezera ndi wotsatira kuchotsa .git kuchokera pachithunzi chomaliza sichingagwire ntchito: chithunzicho chidzakhalabe chowonjezera - umu ndi momwe Docker amagwirira ntchito.
  3. Docker atha kuyambitsa ntchito yomanganso yosafunikira, ngakhale ntchito yomweyi ikumangidwa, koma kuchokera kumitengo yosiyanasiyana. Mwachitsanzo, GitLab imapanga maupangiri osiyana siyana mu /home/gitlab-runner/builds/HASH/[0-N]/yourproject pamene kusanja kofanana kumayatsidwa. Kukonzanso kowonjezera kudzakhala chifukwa choti chikwatu .git ndizosiyana m'mitundu yosiyanasiyana yosungiramo malo omwewo, ngakhale kudzipereka komweko kumapangidwa.

Mfundo yomaliza ilinso ndi zotsatira mukamagwiritsa ntchito werf. Werf imafuna kuti cache yomangidwa ikhalepo poyendetsa malamulo ena (mwachitsanzo. werf deploy). Malamulowa akathamanga, werf amawerengera masiginecha azithunzi omwe atchulidwa werf.yaml, ndipo ayenera kukhala mu cache ya msonkhano - apo ayi lamulo silingathe kupitiriza kugwira ntchito. Ngati siginecha ya siteji imadalira zomwe zili .git, ndiye timapeza chosungira chomwe sichikhazikika pakusintha kwa mafayilo osafunikira, ndipo werf sangathe kukhululukira kuwongolera koteroko (kuti mumve zambiri, onani zolemba).

Zonse kuwonjezera mafayilo ofunikira okha kudzera mu malangizo ADD mulimonsemo kumawonjezera mphamvu ndi kudalirika kwa zolembedwa Dockerfile, komanso imapangitsa kukhazikika kwa cache yomwe yasonkhanitsidwa pa izi Dockerfile, kusintha kosafunikira mu Git.

Zotsatira

Njira yathu yoyamba yolembera omanga athu pazosowa zapadera inali yovuta, yowona mtima komanso yowongoka: m'malo mogwiritsa ntchito ndodo pamwamba pa Dockerfile yokhazikika, tinalemba yankho lathu ndi mawu omveka bwino. Ndipo izi zinali ndi ubwino wake: wokhometsa Stapel akulimbana ndi ntchito yake mwangwiro.

Komabe, polemba omanga athu, tidasiya kuwona chithandizo cha ma Dockerfiles omwe analipo kale. Cholakwikachi tsopano chakonzedwa, ndipo mtsogolomo tikukonzekera kupanga chithandizo cha Dockerfile pamodzi ndi omanga athu a Stapel kuti agawidwe ndi kusonkhana pogwiritsa ntchito Kubernetes (ie kusonkhana kwa othamanga mkati mwa Kubernetes, monga momwe zimachitikira ku kaniko).

Chifukwa chake, ngati mwadzidzidzi muli ndi ma Dockerfiles angapo atagona mozungulira ... yesani werf!

PS Mndandanda wa zolemba pamutuwu

Werenganinso mu blog yathu: "werf - chida chathu cha CI / CD ku Kubernetes (mwachidule ndi lipoti lamavidiyo)".

Source: www.habr.com

Kuwonjezera ndemanga