Faodaidh tu a-nis ìomhaighean Docker a thogail ann an werf a’ cleachdadh Dockerfile àbhaisteach

Nas fheàrr anmoch na riamh. No mar a rinn sinn cha mhòr mearachd mòr le bhith gun a bhith a’ faighinn taic airson Dockerfiles cunbhalach gus ìomhaighean tagraidh a thogail.

Faodaidh tu a-nis ìomhaighean Docker a thogail ann an werf a’ cleachdadh Dockerfile àbhaisteach

Bruidhnidh sinn mu dheidhinn gaoir - Goireas GitOps a bhios ag amalachadh le siostam CI / CD sam bith agus a bheir seachad riaghladh air cearcall-beatha iomlan an tagraidh, a’ ceadachadh:

  • dealbhan a chruinneachadh agus fhoillseachadh,
  • cuir a-steach tagraidhean ann an Kubernetes,
  • cuir às do dhealbhan nach deach an cleachdadh a’ cleachdadh phoileasaidhean sònraichte.


Is e feallsanachd a’ phròiseict innealan ìre ìosal a chruinneachadh ann an aon shiostam aonaichte a bheir smachd do innleadairean DevOps air tagraidhean. Ma ghabhas e dèanamh, bu chòir goireasan a th’ ann mar-thà (leithid Helm and Docker) a chleachdadh. Mura h-eil fuasgladh ann air duilgheadas, is urrainn dhuinn a h-uile dad a tha riatanach airson seo a chruthachadh agus taic a thoirt dha.

Cùl-fhiosrachadh: an neach-cruinneachaidh dhealbhan agad fhèin

Seo mar a thachair leis an neach-cruinneachaidh ìomhaighean ann an werf: cha robh an Dockerfile àbhaisteach gu leòr dhuinn. Ma bheir thu sùil aithghearr air eachdraidh a’ phròiseict, nochd an duilgheadas seo mu thràth anns na ciad dreachan de werf (an uairsin fhathast ris an canar dapp).

Fhad ‘s a bha sinn a’ cruthachadh inneal airson tagraidhean a thogail a-steach do dhealbhan Docker, thuig sinn gu sgiobalta nach robh Dockerfile freagarrach dhuinn airson gnìomhan sònraichte:

  1. An fheum air tagraidhean lìn beaga àbhaisteach a thogail a rèir an sgeama àbhaisteach a leanas:
    • cuir a-steach eisimeileachd tagraidh air feadh an t-siostaim,
    • stàlaich pasgan de leabharlannan eisimeileachd tagraidh,
    • maoin a chruinneachadh,
    • agus as cudromaiche, ùraich an còd san ìomhaigh gu luath agus gu h-èifeachdach.
  2. Nuair a thèid atharrachaidhean a dhèanamh air faidhlichean pròiseict, feumaidh an neach-togail còmhdach ùr a chruthachadh gu sgiobalta le bhith a’ cur badan air na faidhlichean atharraichte.
  3. Ma tha cuid de fhaidhlichean air atharrachadh, feumar an ìre eisimeileach co-fhreagarrach ath-thogail.

An-diugh tha mòran chothroman eile aig an neach-cruinneachaidh againn, ach b’ iad sin na miannan agus na miannan tùsail.

San fharsaingeachd, gun a bhith a’ smaoineachadh dà uair, dh’ ullaich sinn sinn fhìn leis a’ chànan prògramaidh a chleachd sinn (faic gu h-ìosal) agus bhuail e an rathad gu cur an gnìomh DSL fhèin! A rèir nan amasan, bhathas an dùil cunntas a thoirt air a’ phròiseas cruinneachaidh ann an ìrean agus dearbhadh eisimeileachd nan ìrean sin air faidhlichean. Agus chuir e ris neach-cruinneachaidh fhèin, a thionndaidh an DSL gu bhith na amas mu dheireadh - ìomhaigh cruinnichte. An toiseach bha an DSL ann an Ruby, ach mar gluasad gu Golang - thòisich config an neach-cruinneachaidh againn air a mhìneachadh ann am faidhle YAML.

Faodaidh tu a-nis ìomhaighean Docker a thogail ann an werf a’ cleachdadh Dockerfile àbhaisteach
Seann config airson dapp ann an Ruby

Faodaidh tu a-nis ìomhaighean Docker a thogail ann an werf a’ cleachdadh Dockerfile àbhaisteach
An rèiteachadh gnàthach airson werf air YAML

Dh'atharraich uidheamachd an neach-cruinneachaidh thar ùine cuideachd. An toiseach, chruthaich sinn dìreach Dockerfile sealach air an itealan bhon rèiteachadh againn, agus an uairsin thòisich sinn a ’ruith stiùireadh cruinneachaidh ann an soithichean sealach agus a’ gealltainn.

NB: Aig an àm seo, tha an neach-cruinneachaidh againn, a tha ag obair leis an config aige fhèin (ann an YAML) agus ris an canar an neach-cruinneachaidh Stapel, air fàs gu bhith na inneal gu math cumhachdach mar-thà. Tha an tuairisgeul mionaideach aige airidh air artaigilean fa leth, agus gheibhear mion-fhiosrachadh bunaiteach ann sgrìobhainnean.

Mothachadh air an duilgheadas

Ach thuig sinn, agus chan ann sa bhad, gu robh sinn air aon mhearachd a dhèanamh: cha do chuir sinn an comas tog ìomhaighean tro Dockerfile àbhaisteach agus fhilleadh a-steach don aon bhun-structar riaghlaidh tagraidh deireadh-gu-deireadh (ie cruinnich ìomhaighean, cuir an sàs agus glan iad). Ciamar a bhiodh e comasach inneal a dhèanamh airson a chleachdadh ann an Kubernetes agus gun taic Dockerfile a chuir an gnìomh, i.e. dòigh àbhaisteach airson cunntas a thoirt air ìomhaighean airson a’ mhòr-chuid de phròiseactan? ..

An àite a’ cheist seo a fhreagairt, tha sinn a’ tabhann fuasgladh. Dè ma tha Dockerfile agad mu thràth (no seata de Dockerfiles) agus gu bheil thu airson werf a chleachdadh?

NB: Co-dhiù, carson a bhiodh tu fiù 's ag iarraidh weirp a chleachdadh? Tha na prìomh fheartan a 'tighinn sìos gu na leanas:

  • làn chearcall riaghlaidh tagraidh a’ toirt a-steach glanadh ìomhaighean;
  • an comas cruinneachadh grunn dhealbhan a riaghladh aig an aon àm bho aon rèiteachadh;
  • Pròiseas cleachdadh nas fheàrr airson clàran a tha co-chosmhail ri Helm.

Gheibhear liosta nas coileanta dhiubh aig duilleag pròiseict.

Mar sin, nam biodh sinn na bu thràithe air tairgse an Dockerfile ath-sgrìobhadh nar config, a-nis canaidh sinn gu toilichte: “Leig le werf na Dockerfiles agad a thogail!”

Ciamar a chleachdas tu?

Nochd làn bhuileachadh na feart seo anns an fhoillseachadh werf v1.0.3-beta.1. Tha am prionnsapal coitcheann sìmplidh: bidh an neach-cleachdaidh a’ sònrachadh an t-slighe gu Dockerfile a tha ann mar-thà anns an werf config, agus an uairsin a’ ruith an àithne werf build... agus sin e - cruinnichidh werf an ìomhaigh. Bheir sinn sùil air eisimpleir eas-chruthach.

Innsidh sinn an ath fhear Dockerfile ann am freumh a’ phròiseict:

FROM ubuntu:18.04
RUN echo Building ...

Agus bidh sinn ag ainmeachadh werf.yamla chleachdas seo Dockerfile:

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

Uile! Clì ruith werf build:

Faodaidh tu a-nis ìomhaighean Docker a thogail ann an werf a’ cleachdadh Dockerfile àbhaisteach

A bharrachd air an sin, faodaidh tu na leanas ainmeachadh werf.yaml gus grunn ìomhaighean a thogail bho dhiofar Dockerfiles aig an aon àm:

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

Mu dheireadh, tha e cuideachd a 'toirt taic do bhith a' dol seachad air crìochan togail a bharrachd, leithid --build-arg и --add-host - tro werf config. Tha tuairisgeul iomlan air rèiteachadh ìomhaigh Dockerfile ri fhaighinn aig straniце dokumentации.

Ciamar a dh'obraicheas e?

Tron phròiseas togail, bidh an tasgadan àbhaisteach de shreathan ionadail ann an gnìomhan Docker. Ge-tà, is e an rud a tha cudromach gu bheil an fheòil sin cuideachd a’ fighe a-steach rèiteachadh Dockerfile a-steach don bhun-structar aige. Dè tha seo a' ciallachadh?

  1. Tha gach ìomhaigh a chaidh a thogail bho Dockerfile air a dhèanamh suas de aon ìre ris an canar dockerfile (Faodaidh tu barrachd a leughadh mu na h-ìrean a th’ ann an werf an seo).
  2. Airson àrd-ùrlar dockerfile bidh werf a’ tomhas ainm-sgrìobhte a tha an urra ri susbaint rèiteachadh Dockerfile. Nuair a dh’ atharraicheas rèiteachadh Dockerfile, bidh ainm-sgrìobhte an àrd-ùrlair ag atharrachadh dockerfile agus bidh werf a’ tòiseachadh ath-thogail den ìre seo le config Dockerfile ùr. Mura h-atharraich an t-ainm-sgrìobhte, bheir werf an ìomhaigh bhon tasgadan (Chaidh iomradh a thoirt air barrachd fiosrachaidh mu chleachdadh ainmean-sgrìobhte ann an werf ann an an aithisg seo).
  3. An uairsin, faodar na h-ìomhaighean cruinnichte fhoillseachadh leis an àithne werf publish (no werf build-and-publish) agus cleachd e airson a chuir gu Kubernetes. Thèid ìomhaighean foillsichte gu Clàr an Docker a ghlanadh le bhith a’ cleachdadh innealan glanaidh àbhaisteach, i.e. Thèid seann ìomhaighean (nas sine na N latha), ìomhaighean co-cheangailte ri meuran Git nach eil ann, agus poileasaidhean eile a ghlanadh gu fèin-ghluasadach.

Gheibhear barrachd fiosrachaidh mu na puingean a tha air am mìneachadh an seo anns na sgrìobhainnean:

Notaichean agus ro-chùram

1. Chan eil taic ri URL taobh a-muigh ann an ADD

Chan eil taic ann an-dràsta URL a-muigh a chleachdadh ann an stiùireadh ADD. Cha tòisich Werf ath-thogail nuair a dh'atharraicheas an goireas aig an URL ainmichte. Tha sinn an dùil am feart seo a chuir ris a dh’ aithghearr.

2. Chan urrainn dhut .git a chur ris an ìomhaigh

Anns an fharsaingeachd, a 'cur eòlaire .git san ìomhaigh - droch chleachdadh borb agus seo carson:

  1. ma .git fhathast san ìomhaigh dheireannach, tha seo a’ dol an aghaidh nam prionnsapalan App 12 factor air: Leis gum feum an dealbh mu dheireadh a bhith ceangailte ri aon ghealladh, cha bu chòir dha a bhith comasach git checkout gealladh neo-riaghailteach.
  2. .git a’ meudachadh meud na h-ìomhaigh (faodaidh an stòr a bhith mòr air sgàth ’s gun deach faidhlichean mòra a chur ris agus an uairsin an toirt às). Cha bhi meud craobh-obrach co-cheangailte ri gealltanas sònraichte a-mhàin an urra ri eachdraidh gnìomhachd ann an Git. Anns a 'chùis seo, a chur ris agus an dèidh sin a thoirt air falbh .git chan obraich an ìomhaigh mu dheireadh: gheibh an ìomhaigh fhathast còmhdach a bharrachd - seo mar a tha Docker ag obair.
  3. Faodaidh docker ath-thogail neo-riatanach a thòiseachadh, eadhon ged a tha an aon ghealladh ga thogail, ach bho dhiofar chraobhan-obrach. Mar eisimpleir, bidh GitLab a’ cruthachadh chlàran clonaichte fa-leth ann an /home/gitlab-runner/builds/HASH/[0-N]/yourproject nuair a tha co-chruinneachadh co-shìnte air a chomasachadh. Bidh an ath-chruinneachadh a bharrachd mar thoradh air gu bheil an eòlaire .git eadar-dhealaichte ann an dreachan clonaichte eadar-dhealaichte den aon stòr, eadhon ged a tha an aon ghealladh air a thogail.

Tha buaidh aig a’ phuing mu dheireadh cuideachd nuair a thathar a’ cleachdadh werf. Tha Werf ag iarraidh gum bi an tasgadan togte an làthair nuair a bhios tu a’ ruith cuid de dh’ àitheantan (m.e. werf deploy). Nuair a bhios na h-òrdughan sin a’ ruith, bidh werf a’ cunntadh ainmean ìre airson nan ìomhaighean a tha air an sònrachadh ann werf.yaml, agus feumaidh iad a bhith san tasgadan cruinneachaidh - air neo cha bhith e comasach don àithne leantainn air adhart ag obair. Ma tha ainm-sgrìobhte an àrd-ùrlar an urra ris an t-susbaint .git, an uairsin gheibh sinn tasgadan a tha neo-sheasmhach ri atharrachaidhean ann am faidhlichean neo-iomchaidh, agus cha bhith e comasach dha werf maitheanas a thoirt do leithid de thar-shealladh (airson tuilleadh fiosrachaidh, faic sgrìobhainnean).

San fharsaingeachd cuir a-steach dìreach cuid de na faidhlichean riatanach tro na stiùiridhean ADD ann an suidheachadh sam bith a’ meudachadh èifeachdas agus earbsachd na sgrìobhte Dockerfile, agus cuideachd a’ leasachadh seasmhachd an tasgadan a chaidh a chruinneachadh airson seo Dockerfile, gu atharrachaidhean neo-iomchaidh ann an Git.

An toradh

Bha a’ chiad shlighe againn gu bhith a’ sgrìobhadh an neach-togail againn fhèin airson feumalachdan sònraichte cruaidh, onarach agus sìmplidh: an àite a bhith a’ cleachdadh crutches a bharrachd air an Dockerfile àbhaisteach, sgrìobh sinn ar fuasgladh le co-chòrdadh àbhaisteach. Agus bha na buannachdan aige: tha an neach-cruinneachaidh Stapel a 'dèiligeadh gu foirfe ris an obair aige.

Ach, ann a bhith a’ sgrìobhadh an neach-togail againn fhèin, chaill sinn sealladh air an taic airson Dockerfiles a th’ ann mar-thà. Tha an locht seo a-nis air a shuidheachadh, agus san àm ri teachd tha sinn an dùil taic Dockerfile a leasachadh còmhla ris an neach-togail àbhaisteach Stapel againn airson togalaichean sgaoilte agus airson togalaichean a’ cleachdadh Kubernetes (ie a’ togail air ruitheadairean taobh a-staigh Kubernetes, mar a tha air a dhèanamh ann an kaniko).

Mar sin, ma tha dà Dockerfiles agad gu h-obann nan laighe timcheall ... feuch gaoir!

PS Liosta de sgrìobhainnean air a’ chuspair

Leugh cuideachd anns a’ bhlog againn: “werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)".

Source: www.habr.com

Cuir beachd ann