Ka taea e koe te hanga whakaahua Docker i roto i te werf ma te whakamahi i te Dockerfile auau

He pai ake te mutunga mai i te kore. Me pehea ranei i tata he hapa nui na te kore tautoko mo nga Dockerfiles auau ki te hanga whakaahua tono.

Ka taea e koe te hanga whakaahua Docker i roto i te werf ma te whakamahi i te Dockerfile auau

Ka korero tatou mo werf — Ko nga taputapu GitOps e hono ana ki tetahi punaha CI/CD me te whakahaere i te huringa ora katoa o te tono, ka taea:

  • kohikohi me te whakaputa whakaahua,
  • toha tono ki Kubernetes,
  • whakakorehia nga whakaahua kaore i whakamahia ma te whakamahi i nga kaupapa here motuhake.


Ko te kaupapa o te kaupapa ko te kohi taputapu taumata-iti ki roto i te punaha whakakotahi kotahi ka whakawhiwhia ki nga miihini DevOps te mana whakahaere mo nga tono. Mena ka taea, me whakamahi nga taputapu o mua (penei i a Helm me Docker). Mena kaore he otinga mo tetahi raruraru, ka taea e tatou te hanga me te tautoko i nga mea katoa e tika ana mo tenei.

Papamuri: ko to kaikohi whakaahua

Koinei te mea i pa ki te kaikohi whakaahua i werf: ko te Dockerfile o mua kaore i ranea mo matou. Mena ka ata titiro koe ki te hitori o te kaupapa, kua puta kee tenei raru i nga putanga tuatahi o werf (katahi ano e mohiotia ana ko dapp).

I a matou e hanga ana i tetahi taputapu mo te hanga tono ki nga whakaahua Docker, ka mohio matou kaore i pai a Dockerfile mo matou mo etahi mahi tino motuhake:

  1. Ko te hiahia ki te hanga i nga tono paetukutuku iti kia rite ki te kaupapa paerewa e whai ake nei:
    • tāutahia nga whakawhirinakitanga tono puta noa i te punaha,
    • whakauruhia he paihere o nga whare pukapuka whakawhirinakitanga tono,
    • kohikohi rawa,
    • me te mea nui, kia tere, kia pai te whakahou i te waehere i roto i te ahua.
  2. Ina he huringa ki nga konae kaupapa, me tere te hanga e te kaihanga he paparanga hou ma te tono papaki ki nga konae kua whakarereketia.
  3. Mena kua rereke etahi o nga konae, katahi ka tika te hanga ano i te waahanga whakawhirinaki e pa ana.

I tenei ra he maha atu nga huarahi ka taea e taatau kaikohi, engari koinei nga hiahia me nga akiaki tuatahi.

I te nuinga o te waa, me te kore whakaaro rua, ka mau matou i a matou ano ki te reo hotaka i whakamahia e matou (tirohia ki raro) ka pa ki te huarahi ki te whakatinana ake DSL! I runga ano i nga whaainga, i whakaarohia kia whakaahuahia nga waahanga o te huihuinga me te whakatau i nga whakawhirinakitanga o enei waahanga ki runga i nga konae. Na ka whakakiia ake kaikohi, i huri i te DSL ki te whainga whakamutunga - he ahua huihui. I te tuatahi ko te DSL i Ruby, engari hei whakawhiti ki Golang — Ko te whirihora o ta matou kaikohi i timata ki te whakaahua i roto i te konae YAML.

Ka taea e koe te hanga whakaahua Docker i roto i te werf ma te whakamahi i te Dockerfile auau
Te whirihora tawhito mo te dapp i Ruby

Ka taea e koe te hanga whakaahua Docker i roto i te werf ma te whakamahi i te Dockerfile auau
Whirihoranga o naianei mo te werf i runga i te YAML

I rereke ano te tikanga o te kaikohi i te waa. I te tuatahi, i hanga noa e matou he Dockerfile rangitahi i runga i te rere mai i ta maatau whirihoranga, katahi ka tiimata matou ki te whakahaere i nga tohutohu huihuinga i roto i nga ipu rangitahi me te mahi.

NB: I tenei wa, ko ta matou kaikohi, e mahi ana me tana ake whirihora (i roto i te YAML) ka kiia ko te kaikohi Stapel, kua whakawhanakehia hei taputapu tino kaha. Ko tana whakamaarama taipitopito e tika ana mo nga tuhinga motuhake, ka kitea nga korero taketake i roto tuhinga.

Te mohio ki te raruraru

Engari ka mohio matou, kaore i te wa tonu, kua he matou: kaore matou i taapiri i te kaha hanga whakaahua ma te Dockerfile paerewa me te whakauru ki roto i nga hanganga whakahaere tono mutunga-ki-mutunga (arā, kohikohi whakaahua, tohatoha me te horoi). Me pehea e taea ai te hanga taputapu mo te tuku ki Kubernetes me te kore e whakatinana i te tautoko Dockerfile, ara. ara paerewa hei whakaahua whakaahua mo te nuinga o nga kaupapa?..

Engari i te whakautu i tenei patai, ka tukuna e matou he otinga. Ka pehea mena kei a koe he Dockerfile (he huinga ranei o Dockerfiles) me te hiahia ki te whakamahi werf?

NB: Ae ra, he aha koe i hiahia ai ki te whakamahi werf? Ko nga ahuatanga matua ka heke iho ki nga mea e whai ake nei:

  • te huringa whakahaere tono katoa tae atu ki te horoi whakaahua;
  • te kaha ki te whakahaere i te huihuinga o nga whakaahua maha i te wa kotahi mai i te whirihora kotahi;
  • Kua pai ake te mahi tukunga mo nga tūtohi Hototahi-Helm.

Ka kitea he rarangi katoa o ratou i wharangi kaupapa.

Na, ki te mea i mua ka tukuna e matou ki te tuhi ano i te Dockerfile i roto i ta maatau whirihora, inaianei ka koa matou ki te kii: "Kia werf te hanga i o Dockerfiles!"

Me pehea te whakamahi?

Ko te whakatinanatanga katoa o tenei ahuatanga i puta i te tukunga werf v1.0.3-beta.1. He maamaa te maapono whanui: ka tohua e te kaiwhakamahi te ara ki tetahi Dockerfile kei roto i te whirihora werf, katahi ka whakahaere i te whakahau werf build... a koinei - ka whakahiato e werf te ahua. Kia titiro tatou ki tetahi tauira waitara.

Kia panuitia te korero e whai ake nei Dockerfile i te pakiaka kaupapa:

FROM ubuntu:18.04
RUN echo Building ...

A ka panuitia e matou werf.yamle whakamahi ana i tenei Dockerfile:

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

Katoa! Mauī oma werf build:

Ka taea e koe te hanga whakaahua Docker i roto i te werf ma te whakamahi i te Dockerfile auau

I tua atu, ka taea e koe te whakapuaki i nga mea e whai ake nei werf.yaml ki te hanga i etahi whakaahua mai i nga Dockerfiles rereke i te wa kotahi:

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

Ka mutu, ka tautoko hoki i te tuku i nga taapiri hanga taapiri, penei i --build-arg и --add-host - mā te werf config. He whakaahuatanga katoa mo te whirihoranga whakaahua Dockerfile kei te waatea i wharangi tuhinga.

Ka pēhea te mahi i te reira?

I te wa o te hangahanga, ka mahi te keteroki paerewa o nga paparanga rohe i Docker. Heoi, ko te mea nui ko tera werf hoki ka whakauru i te whirihoranga Dockerfile ki ona hanganga. He aha te tikanga o tenei?

  1. Ko ia ahua i hangaia mai i te Dockerfile he waahanga kotahi e kiia ana dockerfile (Ka taea e koe te panui atu mo nga waahanga kei roto i te werf konei).
  2. Mo te atamira dockerfile Werf te tatau i tetahi waitohu e whakawhirinaki ana ki nga ihirangi o te whirihoranga Dockerfile. Ina huri te whirihoranga Dockerfile, ka huri te hainatanga atamira dockerfile ka timata a werf ki te hanga ano i tenei waahanga me tetahi whirihora Dockerfile hou. Ki te kore e huri te hainatanga, ka tangohia e werf te ahua mai i te keteroki (Ko etahi atu korero mo te whakamahi i nga hainatanga i roto i te werf i whakaahuahia i roto i tenei purongo).
  3. I muri mai, ka taea te whakaputa i nga whakaahua kua kohia me te whakahau werf publish (ranei werf build-and-publish) me te whakamahi mo te tuku ki nga Kubernetes. Ko nga whakaahua kua whakaputaina ki te Rehita Docker ka horoia ma te whakamahi i nga taputapu horoi werf, ara. Ko nga whakaahua tawhito (tawhito ake i nga ra N), ko nga whakaahua e pa ana ki nga manga Git kore-kore, me etahi atu kaupapa here ka horoi aunoa.

Ka kitea etahi atu korero mo nga korero i konei i roto i nga tuhinga:

Nga korero me nga whakatupato

1. Ko te URL o waho e kore e tautokona i ADD

I tenei wa kaore i te tautokohia te whakamahi i tetahi URL o waho i roto i te tohutohu ADD. Kaore a Werf e timata i te hanga ano ina huri te rauemi i te URL kua tohua. Kei te whakamahere matou ki te taapiri i tenei waahanga apopo.

2. Kaore e taea e koe te taapiri .git ki te ahua

Ko te tikanga, te taapiri i te raarangi whaiaronga .git i roto i te ahua - he mahi kino kino, a koinei te take:

  1. ki te .git ka noho tonu ki te ahua whakamutunga, ka takahi tenei i nga kaupapa 12 take taupānga: I te mea me hono te ahua whakamutunga ki te mahi kotahi, kaore e taea te mahi git checkout mahi noa.
  2. .git ka whakanui ake i te rahi o te ahua (ka taea te nui o te putunga na te mea i taapirihia nga konae nui ki reira ka mukua). Ko te rahi o te rakau-mahi e hono ana ki tetahi mahi motuhake kaore e whakawhirinaki ki te hitori o nga mahi i Git. I tenei keehi, ko te taapiri me te tango i muri mai .git mai i te ahua whakamutunga kaore e mahi: ka whiwhi tonu te ahua i tetahi paparanga taapiri - koinei te mahi a Docker.
  3. Ka taea e Docker te hanga i nga mahi koretake, ahakoa kei te hangahia taua mahi, engari mai i nga rakau-mahi rereke. Hei tauira, ka hangaia e GitLab nga raarangi motuhake kua kati /home/gitlab-runner/builds/HASH/[0-N]/yourproject ina whakahohea te hui whakarara. Ko te taapiri taapiri ka tika na te mea ko te whaiaronga .git he rereke i roto i nga momo rereke rereke o te putunga kotahi, ahakoa he rite te hanga.

Ka whai hua ano te tohu whakamutunga ina whakamahi werf. E hiahia ana a Werf kia noho te keteroki hanga i te wa e whakahaere ana etahi whakahau (hei tauira. werf deploy). Ka rere enei whakahau, ka tatauhia e werf nga hainatanga atamira mo nga whakaahua kua tohua ki roto werf.yaml, a me noho i roto i te keteroki hui - ki te kore ka kore e taea e te whakahau te mahi tonu. Mena ka whakawhirinaki te hainatanga atamira ki te ihirangi .git, ka whiwhi tatou i te keteroki e kore e mau ki nga huringa o nga konae koretake, a ka kore e taea e werf te muru i tera mahi he (mo etahi atu korero, tirohia tuhinga).

Te whānui te taapiri i etahi o nga konae e tika ana na roto i nga tohutohu ADD i roto i tetahi take whakapiki i te pai me te pono o te tuhituhi Dockerfile, me te whakapai ake hoki i te pumau o te keteroki kua kohia mo tenei Dockerfile, ki nga huringa kore i roto i te Git.

Ko te hua

Ko ta matou huarahi tuatahi ki te tuhi i ta matou ake kaihanga mo nga hiahia motuhake he uaua, he pono, he maamaa: hei utu mo te whakamahi i nga tootoo ki runga ake o te Dockerfile paerewa, i tuhia e matou ta matou otinga me te wetereo ritenga. He painga ano tenei: ko te kaikohi a Stapel te tino whakatutuki i ana mahi.

Heoi, i te wa e tuhi ana i ta matou ake kaihanga, kua ngaro matou i te tautoko mo Dockerfiles o naianei. Inaianei kua whakatikahia tenei koha, a a meake nei ka whakamahere matou ki te whakawhanake i te tautoko Dockerfile me ta matou Kaihanga Stapel ritenga mo nga hanga toha me te hanga ma te whakamahi i nga Kubernetes (arā, he hanga i runga i nga kaiwhaiwhai o roto o Kubernetes, pera i te kaniko).

Na, mena ka kitea e koe etahi Dockerfiles e rua e takoto ana ... whakamatauria werf!

PS Rarangi tuhinga mo te kaupapa

Pānuihia hoki i roto i ta maatau blog: "werf - ta matou taputapu mo te CI/CD i Kubernetes (te arotake me te purongo ataata)".

Source: will.com

Tāpiri i te kōrero