Smaoinich gu faiceallach mus cleachd thu Docker-in-Docker airson CI no àrainneachd deuchainn

Smaoinich gu faiceallach mus cleachd thu Docker-in-Docker airson CI no àrainneachd deuchainn

Tha Docker-in-Docker na àrainneachd daemon Docker brìgheil a’ ruith taobh a-staigh an t-soithich fhèin gus ìomhaighean soithich a thogail. B 'e prìomh adhbhar cruthachadh Docker-in-Docker cuideachadh le leasachadh Docker fhèin. Bidh mòran dhaoine ga chleachdadh gus Jenkins CI a ruith. Tha e coltach gu bheil seo àbhaisteach an toiseach, ach an uairsin bidh duilgheadasan ag èirigh a dh ’fhaodar a sheachnadh le bhith a’ stàladh Docker ann an soitheach Jenkins CI. Tha an artaigil seo ag innse dhut mar a nì thu seo. Ma tha ùidh agad anns an fhuasgladh mu dheireadh gun fhiosrachadh, dìreach leugh an earrann mu dheireadh den artaigil, “Fuasgladh air an duilgheadas.”

Smaoinich gu faiceallach mus cleachd thu Docker-in-Docker airson CI no àrainneachd deuchainn

Docker-in-Docker: "Math"

O chionn còrr is dà bhliadhna chuir mi a-steach do Docker bratach -soirbheachail agus sgrìobh a’ chiad dreach de dind. B’ e an t-amas a’ phrìomh sgioba a chuideachadh gus Docker a leasachadh nas luaithe. Ro Docker-in-Docker, bha an cearcall leasachaidh àbhaisteach a’ coimhead mar seo:

  • hackity hack;
  • togail;
  • stad air deamhan Docker ruith;
  • a' cur air bhog daemon Docker ùr;
  • deuchainn;
  • cuir a-rithist an cearcall.

Nam biodh tu airson co-chruinneachadh brèagha, ath-ghinealach a dhèanamh (is e sin, ann an soitheach), dh'fhàs e nas iom-fhillte:

  • hackity hack;
  • dèan cinnteach gu bheil dreach obrach de Docker a’ ruith;
  • tog Docker ùr le seann Docker;
  • stad daemon Docker;
  • tòisich daemon Docker ùr;
  • deuchainn;
  • stad ùr daemon Docker;
  • ath-aithris.

Le teachd Docker-in-Docker, tha am pròiseas air fàs nas sìmplidh:

  • hackity hack;
  • co-chruinneachadh + cur air bhog ann an aon ìre;
  • cuir a-rithist an cearcall.

Nach eil e mòran nas fheàrr mar seo?

Smaoinich gu faiceallach mus cleachd thu Docker-in-Docker airson CI no àrainneachd deuchainn

Docker-in-Docker: "Dona"

Ach, an aghaidh creideas mòr-chòrdte, chan e 100% rionnagan, pònaidhean agus aon-adharcach a th’ ann an Docker-in-Docker. Is e a tha mi a’ ciallachadh gu bheil grunn chùisean ann a dh’ fheumas leasaiche a bhith mothachail.

Tha aon dhiubh a’ buntainn ri LSMn (modalan tèarainteachd Linux) leithid AppArmor agus SELinux: nuair a bhios iad a’ ruith soitheach, faodaidh an “Docker a-staigh” feuchainn ri pròifilean tèarainteachd a chuir an sàs a chuireas an aghaidh no a chuireas troimh-chèile air an “Docker taobh a-muigh”. Is e seo an duilgheadas as duilghe ri fhuasgladh nuair a thathar a’ feuchainn ri buileachadh tùsail a’ bhratach-sochair a chur còmhla. Dh’ obraich na h-atharrachaidhean agam agus chuireadh a h-uile deuchainn seachad air an inneal Debian agam agus VMs deuchainn Ubuntu, ach bhiodh iad a’ bualadh is a’ losgadh air inneal Michael Crosby (bha Fedora aige mar a tha cuimhne agam). Chan eil cuimhne agam air dearbh adhbhar na trioblaid, ach is dòcha gur ann air sgàth gu bheil Mike na ghille glic a tha ag obair le SELINUX = sparradh (chleachd mi AppArmor) agus cha tug na h-atharrachaidhean agam aire do phròifil SELinux.

Docker-in-Docker: "Olc"

Tha an dàrna cùis le draibhearan stòraidh Docker. Nuair a ruitheas tu Docker-in-Docker, bidh Docker taobh a-muigh a’ ruith air mullach siostam faidhle cunbhalach (EXT4, BTRFS, no ge bith dè a th’ agad) agus bidh Docker a-staigh a’ ruith air mullach siostam leth-bhreac-air-sgrìobhadh (AUFS, BTRFS, Device Mapper , msaa). , a rèir na tha air a dhealbhadh gus Docker a-muigh a chleachdadh). Bidh seo a 'cruthachadh mòran choimeasgaidhean nach obraich. Mar eisimpleir, cha bhith e comasach dhut AUFS a ruith a bharrachd air AUFS.

Ma ruitheas tu BTRFS a bharrachd air BTRFS, bu chòir dha obrachadh an-toiseach, ach aon uair ‘s gu bheil fo-leabhraichean neadachaidh ann, fàillidh cuir às don fho-leabhar phàrant. Chan eil àite-ainm aig a’ mhodal Device Mapper, mar sin ma tha iomadh suidheachadh Docker ga ruith air an aon inneal, bidh e comasach dhaibh uile na h-ìomhaighean fhaicinn (agus buaidh) air a chèile agus air na h-innealan cùl-taic container. Tha seo dona.

Tha dòighean-obrach ann airson fuasgladh fhaighinn air mòran de na duilgheadasan sin. Mar eisimpleir, ma tha thu airson AUFS a chleachdadh ann an Docker a-staigh, dìreach tionndaidh am pasgan / var/lib/docker gu leabhar agus bidh thu ceart gu leòr. Tha Docker air cuid de dh’ àiteachan-ainmean bunaiteach a chuir ri ainmean targaid Device Mapper gus ma tha grunn ghairmean Docker a’ ruith air an aon inneal, cha dèan iad ceum air a chèile.

Ach, chan eil an leithid de shuidheachadh cho sìmplidh, mar a chithear bhuapa artaigilean anns an stòr dind air GitHub.

Docker-in-Docker: Bidh e a’ fàs nas miosa

Dè mu dheidhinn an tasgadan togail? Faodaidh seo a bhith gu math duilich cuideachd. Bidh daoine gu tric a’ faighneachd dhomh “ma tha mi a’ ruith Docker-in-Docker, ciamar a chleachdas mi ìomhaighean air an aoigheachd air an aoigh agam an àite a bhith a’ tarraing a h-uile càil air ais don Docker a-staigh agam ”?

Tha cuid de dhaoine iomairteach air feuchainn ri /var/lib/docker a cheangal bhon òstair gu soitheach Docker-in-Docker. Aig amannan bidh iad a’ roinn /var/lib/docker le grunn shoithichean.

Smaoinich gu faiceallach mus cleachd thu Docker-in-Docker airson CI no àrainneachd deuchainn
A bheil thu airson an dàta agad a thruailleadh? Leis gur e seo dìreach a nì cron air an dàta agad!

Chaidh an daemon Docker a dhealbhadh gu soilleir gus am biodh cothrom sònraichte aige air /var/lib/docker. Cha bu chòir do rud sam bith eile "suathadh, poke, no prod" faidhlichean Docker sam bith a tha sa phasgan seo.

Carson a tha seo mar sin? Leis gu bheil seo mar thoradh air aon de na leasanan as cruaidhe a chaidh ionnsachadh fhad ‘s a bha thu a’ leasachadh dotCloud. Bha an einnsean dotCloud container a’ ruith le bhith a’ faighinn grunn phròiseasan a’ faighinn cothrom air /var/lib/dotcloud aig an aon àm. Cha robh cleasan seòlta leithid ath-chur fhaidhlichean atamach (an àite deasachadh in-àite), còd piobair le glasan comhairleachaidh agus èigneachail, agus deuchainnean eile le siostaman tèarainte leithid SQLite agus BDB an-còmhnaidh ag obair. Nuair a bha sinn ag ath-dhealbhadh ar n-einnsean container, a thàinig gu bhith na Docker mu dheireadh, b’ e aon de na co-dhùnaidhean dealbhaidh mòra a bhith a’ daingneachadh a h-uile gnìomh soithich fo aon deamhan gus cuir às leis a h-uile neòlas co-ionannachd.

Na gabh ceàrr mi: tha e gu tur comasach rudeigin math, earbsach agus luath a dhèanamh a bheir a-steach ioma-phròiseasan agus smachd co-shìnte ùr-nodha. Ach tha sinn den bheachd gu bheil e nas sìmplidh agus nas fhasa còd a sgrìobhadh agus a chumail a’ cleachdadh Docker mar an aon chluicheadair.

Tha seo a’ ciallachadh ma bhios tu a’ roinn an eòlaire / var/lib/docker eadar iomadh suidheachadh Docker, bidh duilgheadasan agad. Gu dearbh, faodaidh seo obrachadh, gu sònraichte anns na tràth ìrean de dheuchainn. “Èist, Ma, is urrainn dhomh ubuntu a ruith mar docker!” Ach feuch rudeigin nas iom-fhillte, mar a bhith a 'tarraing an aon ìomhaigh bho dhà shuidheachadh eadar-dhealaichte, agus chì thu an saoghal a' losgadh.

Tha seo a’ ciallachadh ma bhios an siostam CI agad a’ togail agus ag ath-thogail, a h-uile uair a nì thu ath-thòiseachadh air an t-soitheach Docker-in-Docker agad, tha cunnart ann gun cuir thu nuke a-steach don tasgadan aige. Chan eil seo fionnar idir!

Fuasgladh dhuilgheadasan

Gabhamaid ceum air ais. A bheil feum agad air Docker-in-Docker no a bheil thu dìreach airson a bhith comasach air Docker a ruith agus soithichean agus ìomhaighean a thogail agus a ruith bhon t-siostam CI agad fhad ‘s a tha an siostam CI sin ann an soitheach?

Cuiridh mi geall gu bheil a’ mhòr-chuid ag iarraidh an roghainn mu dheireadh, a’ ciallachadh gu bheil iad ag iarraidh gum bi siostam CI mar Jenkins comasach air soithichean a ruith. Agus is e an dòigh as fhasa seo a dhèanamh dìreach socaid Docker a chuir a-steach don ghobhar CI agad agus a cheangal ris a’ bhratach -v.

Gu sìmplidh, nuair a ruitheas tu an soitheach CI agad (Jenkins no eile), an àite a bhith a’ slaodadh rudeigin còmhla ri Docker-in-Docker, tòisich leis an loidhne:

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

Bidh cothrom aig a’ ghobhar seo a-nis air socaid an Docker agus mar sin bidh e comasach dhaibh soithichean a ruith. Ach a-mhàin an àite a bhith a’ ruith shoithichean “leanabh”, cuiridh e soithichean “bràthaireach” air bhog.

Feuch seo le bhith a’ cleachdadh an ìomhaigh oifigeil docker (anns a bheil binary an Docker):

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

Tha e a’ coimhead agus ag obair mar Docker-in-Docker, ach chan e Docker-in-Docker a th’ ann: nuair a chruthaicheas an soitheach seo soithichean a bharrachd, thèid an cruthachadh anns an Docker àrd-ìre. Chan fhaigh thu eòlas air fo-bhuaidhean neadachaidh agus thèid an tasgadan cruinneachaidh a roinn thairis air grunn ghairmean.

Nota: Chomhairlich dreachan roimhe seo den artaigil seo a bhith a’ ceangal binary an Docker bhon òstair chun ghobhar. Tha seo a-nis air fàs neo-earbsach leis nach eil einnsean an Docker a’ còmhdach leabharlannan statach no faisg air statach tuilleadh.

Mar sin, ma tha thu airson Docker a chleachdadh bho Jenkins CI, tha 2 roghainn agad:
a’ stàladh an Docker CLI a’ cleachdadh an t-siostam pacaidh ìomhaigh bunaiteach (ie ma tha an ìomhaigh agad stèidhichte air Debian, cleachd pasganan .deb), a’ cleachdadh an Docker API.

Cuid de shanasan 🙂

Tapadh leibh airson fuireach còmhla rinn. An toil leat na h-artaigilean againn? A bheil thu airson susbaint nas inntinniche fhaicinn? Thoir taic dhuinn le bhith a’ cur òrdugh no a’ moladh do charaidean, sgòth VPS airson luchd-leasachaidh bho $4.99, analog sònraichte de luchd-frithealaidh ìre inntrigidh, a chaidh a chruthachadh leinn dhut: An fhìrinn gu lèir mu VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps bho $ 19 no ciamar a roinn thu frithealaiche? (ri fhaighinn le RAID1 agus RAID10, suas ri 24 cores agus suas ri 40GB DDR4).

Dell R730xd 2x nas saoire ann an ionad dàta Equinix Tier IV ann an Amsterdam? A-mhàin an seo 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV bho $199 anns an Òlaind! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - bho $99! Leugh mu dheidhinn Ciamar a thogail bun-structair Corp. clas le bhith a’ cleachdadh frithealaichean Dell R730xd E5-2650 v4 luach 9000 iùro airson sgillinn?

Source: www.habr.com

Cuir beachd ann