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."
Docker-in-Docker: "Maith"
Níos mó ná dhá bhliain ó shin chuir mé isteach Docker
- 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?
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
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.
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,
Dell R730xd 2x níos saoire i lárionad sonraí Equinix Tier IV in Amstardam? Ach anseo
Foinse: will.com