Smaoinigh faoi dhó roimh Docker-in-Docker a úsáid le haghaidh CI nó timpeallacht tástála

Smaoinigh faoi dhó roimh Docker-in-Docker a úsáid le haghaidh CI nó timpeallacht tástála

Is timpeallacht dheamhan Docker fíorúilithe é Docker-in-Docker a ritheann laistigh den choimeádán féin chun íomhánna coimeádáin a thógáil. Ba é príomhchuspóir an Docker-in-Docker a chruthú ná cabhrú le Docker féin a fhorbairt. Úsáideann go leor daoine é chun Jenkins CI a rith. Dealraíonn sé seo gnáth ar dtús, ach ansin tagann fadhbanna chun cinn is féidir a sheachaint trí Docker a shuiteáil i gcoimeádán Jenkins CI. Insíonn an t-alt seo duit conas é seo a dhéanamh. Má tá suim agat sa réiteach deiridh gan sonraí, léigh an chuid dheireanach den alt, "Réiteach na Fadhb."

Smaoinigh faoi dhó roimh Docker-in-Docker a úsáid le haghaidh CI nó timpeallacht tástála

Docker-in-Docker: "Maith"

Níos mó ná dhá bhliain ó shin chuir mé isteach Docker bratach -phribhléid agus scríobh an chéad leagan de dind. Ba é an sprioc ná cabhrú leis an bhfoireann lárnach Docker a fhorbairt níos tapúla. Roimh an Docker-in-Docker, bhí cuma mar seo ar an timthriall forbartha tipiciúil:

  • haca hack;
  • tóg ;
  • stop a chur le deamhan Docker ag rith;
  • ag seoladh deamhan Docker nua;
  • tástáil;
  • an timthriall arís.

Má bhí tú ag iarraidh tionól álainn in-atáirgthe a dhéanamh (is é sin, i gcoimeádán), d'éirigh sé níos casta:

  • haca hack;
  • déan cinnte go bhfuil leagan oibre de Docker ar siúl;
  • tóg Docker nua le Sean Docker;
  • stop Deamhan Docker;
  • tús a chur le deamhan Docker nua;
  • scrúdú;
  • stop deamhan Docker nua;
  • athuair.

Le teacht an Docker-in-Docker, tá an próiseas éirithe níos simplí:

  • haca hack;
  • tionól + seoladh i gcéim amháin;
  • an timthriall arís.

Nach bhfuil sé i bhfad níos fearr ar an mbealach seo?

Smaoinigh faoi dhó roimh Docker-in-Docker a úsáid le haghaidh CI nó timpeallacht tástála

Docker-in-Docker: "Go dona"

Mar sin féin, contrártha le creideamh an phobail, nach bhfuil Docker-i-Docker 100% réaltaí, capaillíní agus aonbheannaigh. Is éard atá i gceist agam ná go bhfuil roinnt saincheisteanna ann nach mór d'fhorbróir a bheith ar an eolas fúthu.

Baineann ceann acu le LSManna (modúil slándála Linux) mar AppArmor agus SELinux: nuair a bhíonn coimeádán á rith, féadfaidh an "Docker inmheánach" iarracht próifílí slándála a chur i bhfeidhm a dhéanfaidh coinbhleacht nó mearbhall ar an "Docker seachtrach". Is í seo an fhadhb is deacra le réiteach agus iarracht á déanamh cur chun feidhme bunaidh na brataí faoi phribhléid a chumasc. D'oibrigh mo chuid athruithe agus chuirfeadh na tástálacha go léir ar aghaidh ar mo mheaisín Debian agus VManna tástála Ubuntu, ach bheadh ​​​​siad tuairteála agus sruthán ar mheaisín Michael Crosby (bhí Fedora aige mar is cuimhin liom). Ní cuimhin liom cúis chruinn na faidhbe, ach b’fhéidir gurbh amhlaidh gur duine ciallmhar é Mike a oibríonn le SELINUX=enforce (d’úsáid mé AppArmor) agus níor chuir m’athruithe próifílí SELinux san áireamh.

Docker-in-Docker: "olc"

Baineann an dara ceist le tiománaithe stórála Docker. Nuair a ritheann tú Docker-in-Docker, ritheann Docker seachtrach ar bharr córas comhaid rialta (EXT4, BTRFS, nó cibé rud atá agat) agus ritheann Docker inmheánach ar bharr córas cóip-ar-scríobh (AUFS, BTRFS, Mapper Gléas , etc.). , ag brath ar a bhfuil cumraithe chun Docker seachtrach a úsáid). Cruthaíonn sé seo go leor teaglaim nach n-oibreoidh. Mar shampla, ní bheidh tú in ann AUFS a rith ar bharr AUFS.

Má ritheann tú BTRFS ar bharr BTRFS, ba cheart go n-oibreodh sé ar dtús, ach a luaithe a bheidh fo-imleabhair neadaithe ann, ní theipfidh ort an tuismitheoir fo-imleabhar a scriosadh. Níl aon spás ainm ag an modúl Device Mapper, mar sin má tá cásanna iolracha Docker á rith ar an meaisín céanna, beidh siad go léir in ann na híomhánna a fheiceáil (agus tionchar a imirt) ar a chéile agus ar na gléasanna cúltaca coimeádáin. Tá sé seo go dona.

Tá réitigh oibre ann chun go leor de na fadhbanna seo a réiteach. Mar shampla, más mian leat AUFS a úsáid i Docker inmheánach, níl le déanamh ach an fillteán /var/lib/docker a thiontú ina imleabhar agus beidh tú ceart go leor. Chuir Docker roinnt bunspásanna le spriocainmneacha Device Mapper ionas nach mbeidh siad ag dul ar a chéile má bhíonn glaonna Docker iolracha ar siúl ar an meaisín céanna.

Mar sin féin, níl a leithéid de shocrú simplí ar chor ar bith, mar is léir uathu seo earraí sa stór dind ar GitHub.

Docker-in-Docker: Éiríonn sé níos measa

Cad mar gheall ar an taisce tógála? Is féidir é seo a bheith sách deacair freisin. Is minic a fhiafraíonn daoine díom “má tá Docker-in-Docker á rith agam, conas is féidir liom íomhánna arna n-óstáil ar mo óstach a úsáid in ionad gach rud a tharraingt ar ais isteach sa Docker inmheánach”?

Tá iarracht déanta ag roinnt daoine fiontraíoch /var/lib/docker a cheangal ón ósta le coimeádán Docker-in-Docker. Uaireanta roinneann siad /var/lib/docker le coimeádáin iolracha.

Smaoinigh faoi dhó roimh Docker-in-Docker a úsáid le haghaidh CI nó timpeallacht tástála
Ar mhaith leat do shonraí a éilliú? Toisc gurb é seo go díreach cad a dhéanfaidh damáiste do shonraí!

Dearadh an deamhan Docker go soiléir chun rochtain eisiach a bheith aige ar /var/lib/docker. Níor cheart go ndéanfadh aon rud eile "dteagmháil, poke, nó prod" aon chomhaid Docker atá suite san fhillteán seo.

Cén fáth go bhfuil sé seo amhlaidh? Toisc go bhfuil sé seo mar thoradh ar cheann de na ceachtanna is deacra a foghlaimíodh agus dotCloud á fhorbairt. Rith an t-inneall coimeádán dotCloud trí phróisis iolracha a rochtain /var/lib/dotcloud ag an am céanna. Ní raibh cleasanna cunning mar athsholáthar comhad adamhach (in ionad eagarthóireacht in-áit), cód piobair le glais chomhairleacha agus éigeantacha, agus turgnaimh eile le córais shlána ar nós SQLite agus BDB ag obair i gcónaí. Nuair a bhíomar ag athdhearadh ár n-inneall coimeádán, a tháinig chun bheith ina Docker sa deireadh, ba é ceann de na cinntí móra dearaidh ná na hoibríochtaí coimeádáin go léir a chomhdhlúthú faoi dheamhan amháin chun fáil réidh leis an nonsense comhairgeadra ar fad.

Ná bí mícheart dom: is féidir go hiomlán rud éigin maith, iontaofa agus tapa a dhéanamh a bhaineann le próisis iolracha agus rialú comhthreomhar nua-aimseartha. Ach is dóigh linn go bhfuil sé níos simplí agus níos éasca cód a scríobh agus a chothabháil ag baint úsáide as Docker mar an t-aon imreoir.

Ciallaíonn sé seo má roinneann tú an t-eolaire / var/lib/docker idir cásanna iolracha Docker, beidh fadhbanna agat. Ar ndóigh, is féidir leis seo a bheith ag obair, go háirithe sna céimeanna tosaigh den tástáil. “Éist, Ma, is féidir liom ubuntu a rith mar dhugadóir!” Ach déan iarracht rud éigin níos casta, cosúil le tarraingt ar an íomhá céanna ó dhá chás éagsúla, agus feicfidh tú sruthán an domhain.

Ciallaíonn sé seo má dhéanann do chóras CI tógáil agus atógáil, gach uair a atosóidh tú do choimeádán Docker-in-Docker, tá an baol ann go scaoilfidh tú nuke isteach ina taisce. Níl sé seo fionnuar ar chor ar bith!

An réiteach

Déanaimis céim siar. An bhfuil Docker-in-Docker ag teastáil uait i ndáiríre nó ar mhaith leat a bheith in ann Docker a rith agus coimeádáin agus íomhánna a thógáil agus a rith ó do chóras CI agus an córas CI sin féin i gcoimeádán?

Geall liom go bhfuil formhór na ndaoine ag iarraidh an dara rogha, rud a chiallaíonn go dteastaíonn uathu go mbeadh córas CI cosúil le Jenkins in ann coimeádáin a rith. Agus is é an bealach is éasca chun é seo a dhéanamh ná soicéad Docker a chur isteach i do choimeádán CI agus é a nascadh leis an bhratach -v.

Níl ort ach a chur, nuair a ritheann tú do choimeádán CI (Jenkins nó eile), in ionad rud éigin a hackáil in éineacht le Docker-in-Docker, cuir tús leis an líne:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

Beidh rochtain ag an gcoimeádán seo ar an soicéad Docker anois agus mar sin beidh sé in ann coimeádáin a rith. Ach amháin in ionad coimeádáin “leanbh” a rith, seolfaidh sé coimeádáin “siblín”.

Bain triail as seo ag baint úsáide as an íomhá docker oifigiúil (ina bhfuil an dénártha Docker):

docker run -v /var/run/docker.sock:/var/run/docker.sock 
           -ti docker

Breathnaíonn sé agus oibríonn sé cosúil le Docker-in-Docker, ach ní Docker-in-Docker é: nuair a chruthaíonn an coimeádán seo coimeádáin bhreise, cruthófar iad sa Docker ardleibhéil. Ní bheidh taithí agat ar na fo-iarmhairtí a bhaineann le neadú agus déanfar an taisce tionóil a roinnt ar ghlaonna iolracha.

Nóta: Mhol leaganacha roimhe seo den alt seo an dénártha Docker a nascadh ón óstach go dtí an coimeádán. Tá sé seo neamhiontaofa anois toisc nach gclúdaíonn an t-inneall Docker leabharlanna statacha nó gar-statacha a thuilleadh.

Mar sin, más mian leat Docker a úsáid ó Jenkins CI, tá 2 rogha agat:
an Docker CLI a shuiteáil ag baint úsáide as an gcóras pacáistithe íomhá bunúsach (i.e. má tá d’íomhá bunaithe ar Debian, bain úsáid as pacáistí .deb), ag baint úsáide as an Docker API.

Roinnt fógraí 🙂

Go raibh maith agat as fanacht linn. An maith leat ár n-alt? Ar mhaith leat ábhar níos suimiúla a fheiceáil? Tacaigh linn trí ordú a dhéanamh nó moladh a thabhairt do chairde, scamall VPS d'fhorbróirí ó $4.99, analóg uathúil de fhreastalaithe leibhéal iontrála, a cheap muid duit: An fhírinne iomlán a insint faoi VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ó $19 nó conas freastalaí a roinnt? (ar fáil le RAID1 agus RAID10, suas le 24 croíleacan agus suas le 40GB DDR4).

Dell R730xd 2x níos saoire i lárionad sonraí Equinix Tier IV in Amstardam? Ach anseo 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 teilifíse ó $199 san Ísiltír! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ó $99! Léigh faoi Conas corprú bonneagair a thógáil. rang le húsáid freastalaithe Dell R730xd E5-2650 v4 fiú 9000 euro ar phingin?

Foinse: will.com

Add a comment