Kia rua nga whakaaro i mua i te whakamahi i te Docker-in-Docker mo te CI, te taiao whakamatautau ranei

Kia rua nga whakaaro i mua i te whakamahi i te Docker-in-Docker mo te CI, te taiao whakamatautau ranei

Ko Docker-in-Docker he taiao Docker daemon mariko e rere ana i roto i te ipu hei hanga whakaahua ipu. Ko te kaupapa matua o te hanga Docker-in-Docker he awhina ki te whakawhanake i a Docker ake. He maha nga tangata e whakamahi ana hei whakahaere i a Jenkins CI. He ahua noa tenei i te tuatahi, engari ka puta nga raru ka taea te karo ma te whakauru i a Docker ki roto i te ipu Jenkins CI. Ka korero tenei tuhinga ki a koe me pehea e mahi ai. Mena kei te pirangi koe ki te otinga whakamutunga kaore he taipitopito, panuihia te waahanga whakamutunga o te tuhinga, "Te Whakaoti Raruraru."

Kia rua nga whakaaro i mua i te whakamahi i te Docker-in-Docker mo te CI, te taiao whakamatautau ranei

Docker-in-Docker: "He pai"

Neke atu i te rua tau ki muri ka whakauru ahau ki Docker haki – whai mana me te tuhi putanga tuatahi o dind. Ko te whainga ko te awhina i te roopu matua ki te whakawhanake tere i a Docker. I mua i te Docker-in-Docker, he penei te ahua o te huringa whanaketanga angamaheni:

  • hackity hack;
  • hanga;
  • te whakamutu i te daemon Docker e rere ana;
  • te whakarewa i tetahi daemon Docker hou;
  • whakamatautau;
  • tuaruatia te huringa.

Mena ka hiahia koe ki te hanga i tetahi huihuinga ataahua, ka taea te whakaputa (ara, i roto i te ipu), katahi ka tino uaua:

  • hackity hack;
  • kia mohio kei te rere tetahi putanga mahi o Docker;
  • hanga Docker hou me Docker tawhito;
  • mutu Docker daemon;
  • tīmatahia he daemon Docker hou;
  • whakamātautau;
  • whakamutua te daemon Docker hou;
  • tukurua.

Na te taenga mai o Docker-in-Docker, kua ngawari ake te mahi:

  • hackity hack;
  • te huihuinga + whakarewa i te waahanga kotahi;
  • tuaruatia te huringa.

Ehara i te mea pai ake i tenei huarahi?

Kia rua nga whakaaro i mua i te whakamahi i te Docker-in-Docker mo te CI, te taiao whakamatautau ranei

Docker-in-Docker: "Kino"

Heoi, he rereke ki nga whakapono rongonui, ko Docker-in-Docker ehara i te 100% nga whetu, nga poni me nga unicorn. Ko taku tikanga he maha nga take e tika ana kia mohiohia e te kaiwhakawhanake.

Ko tetahi o ratou e pa ana ki nga LSM (Linux security modules) penei i te AppArmor me te SELinux: i te wa e whakahaere ana i tetahi ipu, ka ngana te "Docker o roto" ki te tono i nga korero haumarutanga ka taupatupatu, ka pohehe ranei i te "Docker waho". Koinei te raru tino uaua ki te whakaoti i te wa e ngana ana ki te hanumi i te whakatinanatanga taketake o te haki -privileged. I mahi aku huringa ka paahi nga whakamatautau katoa ki taku miihini Debian me nga VM whakamatautau Ubuntu, engari ka pakaru, ka wera ki runga i te miihini a Michael Crosby (kei a ia a Fedora e maumahara ana ahau). Kaore au e mahara ki te tino take o te raru, engari na te mea he tangata mohio a Mike e mahi tahi ana me SELINUX=enforce (I whakamahia e ahau te AppArmor) a ko aku huringa kaore i aro ki nga korero a SELinux.

Docker-in-Docker: "Kino"

Ko te take tuarua ko nga taraiwa rokiroki Docker. Ka whakahaerehia e koe a Docker-in-Docker, ka rere a Docker o waho ki runga ake o te punaha konae (EXT4, BTRFS, aha ranei kei a koe) ka rere a Docker o roto ki runga ake o te punaha kape-tuhi-tuhi (AUFS, BTRFS, Pūrere Mahere , etc.). , i runga i nga mea i whirihorahia hei whakamahi i te Docker waho). Ka hangaia e tenei he maha nga huinga kaore e mahi. Hei tauira, kare e taea e koe te whakahaere AUFS ki runga ake o AUFS.

Mena kei te whakahaere koe i te BTRFS ki runga ake o te BTRFS, me mahi i te tuatahi, engari i te wa kua kohanga nga waahanga iti, ka kore te whakakore i te riipene matua. Karekau he mokowāingoa o te kōwae Pūrere Mahere, na mena he maha nga tauira Docker e whakahaere ana i runga i te miihini kotahi, ka taea e ratou katoa te kite (me te awe) i nga whakaahua ki a raatau me nga taputapu taapiri ipu. He kino tenei.

He huarahi hei whakaoti i te maha o enei raru. Hei tauira, ki te hiahia koe ki te whakamahi i te AUFS i roto i te Docker o roto, huri noa i te kōpaki /var/lib/docker ki te rōrahi ka pai koe. Kua taapirihia e Docker etahi mokowā ingoa turanga ki nga ingoa whainga a Pūrere Mahere, mena he maha nga waea a Docker e rere ana i runga i te miihini kotahi, kare ratou e takahi tetahi ki tetahi.

Heoi ano, ehara i te mea ngawari noa iho, penei i te mea ka kitea mai i enei Tuhinga i roto i te putunga dind i GitHub.

Docker-in-Docker: Ka kino haere

Me pehea te keteroki hanga? He tino uaua ano tenei. He maha nga patai a nga tangata ki a au "mehemea kei te whakahaere ahau i te Docker-in-Docker, me pehea e taea ai e au te whakamahi i nga whakaahua e whakahaerehia ana i runga i taku kaihautu, kaua ki te whakahoki i nga mea katoa ki roto i taku Docker o roto"?

Kua ngana etahi tangata pukumahi ki te here i te /var/lib/docker mai i te kaihautu ki tetahi ipu Docker-in-Docker. I etahi wa ka tiri /var/lib/docker ki nga ipu maha.

Kia rua nga whakaaro i mua i te whakamahi i te Docker-in-Docker mo te CI, te taiao whakamatautau ranei
Kei te pirangi koe ki te whakakino i o raraunga? Na te mea koinei tonu te mea ka pakaru o raraunga!

Ko te Docker daemon i tino hangaia kia whai waahi motuhake ki /var/lib/docker. Kaore he mea ke atu kia "pa, paopao, kii" ki nga konae Docker kei roto i tenei kōpaki.

He aha i penei ai? Na te mea koinei te hua o tetahi o nga akoranga tino uaua i akohia i te wa e whakawhanake ana i te dotCloud. I rere te miihini ipu dotCloud ma te maha o nga tukanga e uru ana ki /var/lib/dotcloud i te wa kotahi. Ko nga mahi tinihanga penei i te whakakapi i nga konae ngota (kaore i te whakatika i roto i te waahi), te pepa pepa me nga raka tohutohu me te whakahau, me etahi atu whakamatautau me nga punaha haumaru penei i te SQLite me te BDB kaore i mahi i nga wa katoa. I a matou e whakahoahoa ana i to matou miihini ipu, i te mutunga ka noho ko Docker, ko tetahi o nga whakatau hoahoa nui ko te whakakotahi i nga mahi ipu katoa ki raro i te daemon kotahi hei whakakore i nga mahi poauau katoa.

Kaua e pohehe: ka taea te hanga i tetahi mea pai, pono me te tere e uru ana ki nga tukanga maha me te mana whakarara hou. Engari ki ta matou whakaaro he maamaa ake te tuhi me te pupuri i nga waehere ma te whakamahi i a Docker hei kaitakaro anake.

Ko te tikanga mena ka tohatoha koe i te raarangi /var/lib/docker i waenga i nga tauira Docker maha, ka raru koe. Ae, ka taea e tenei te mahi, ina koa i nga waahanga tuatahi o te whakamatautau. "Whakarongo, e Ma, ka taea e au te whakahaere i te ubuntu hei kaipakihi!" Engari me whakamatau tetahi mea uaua ake, penei i te toia te ahua ano mai i nga ahuatanga rereke e rua, ka kite koe i te ahi o te ao.

Ko te tikanga mena ka mahia e to punaha CI te hanga me te hanga ano, i nga wa katoa ka whakaara ano koe i to ipu Docker-in-Docker, ka tupono koe ki te tuku nuke ki roto i tana keteroki. Ehara tenei i te tino pai!

Nga raruraru

Kia hoki ki muri. Kei te tino hiahia koe ki a Docker-in-Docker, kei te hiahia noa koe ki te whakahaere i a Docker me te hanga me te whakahaere i nga ipu me nga whakaahua mai i to punaha CI i te mea kei roto tonu te punaha CI i roto i te ipu?

Kei te pai ahau ko te nuinga o nga tangata e hiahia ana ki te whiringa whakamutunga, ko te tikanga kei te pirangi ratou ki te punaha CI penei i a Jenkins kia kaha ki te whakahaere ipu. A ko te huarahi ngawari ki te mahi i tenei ko te whakauru noa i te turanga Docker ki roto i to ipu CI me te hono atu ki te haki -v.

Maamaa noa, ka whakahaere koe i to ipu CI (Jenkins me etahi atu), kaua ki te tarai i tetahi mea me te Docker-in-Docker, tiimata me te raina:

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

Ka whai waahi tenei ipu ki te turanga Docker na reira ka taea te whakahaere ipu. Haunga te whakahaere i nga ipu "tamariki", ka whakarewahia e ia nga ipu "teina".

Whakamātauria tenei ma te whakamahi i te ahua docker mana (kei roto te Docker rua):

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

He rite te ahua me te mahi penei i a Docker-in-Docker, engari ehara i te Docker-in-Docker: ka hanga e tenei ipu etahi atu ipu, ka hangaia ki te Docker taumata-runga. Kare koe e pa ki nga paanga o te kohanga ka tohatohahia te keteroki huihuinga puta noa i nga waea maha.

Tuhipoka: Ko nga putanga o mua o tenei tuhinga i tohutohu ki te hono i te Docker rua mai i te kaihautu ki te ipu. Ko tenei kua kore e pono i te mea kua kore te miihini Docker e kapi i nga whare pukapuka tuuturu, tata-tata ranei.

Na, ki te hiahia koe ki te whakamahi i a Docker mai i a Jenkins CI, e rua nga whiringa:
te whakauru i te Docker CLI ma te whakamahi i te punaha kohinga whakaahua taketake (arā, mena ko to ahua kei runga i a Debian, whakamahia nga kohinga .deb), ma te whakamahi i te Docker API.

Ko etahi panui 🙂

Mauruuru koe mo te noho ki a matou. He pai ki a koe a maatau tuhinga? Kei te hiahia koe ki te kite i etahi atu mea whakamere? Tautokohia matou ma te tuku ota me te tuku korero ki o hoa, kapua VPS mo nga kaihanga mai i te $4.99, he tairitenga ahurei o nga kaitoro taumata-urunga, na matou i hanga mo koe: Ko te pono katoa mo VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai i te $19 me pehea ranei te tiri i tetahi tūmau? (e waatea ana me te RAID1 me te RAID10, tae atu ki te 24 matua me te 40GB DDR4).

Dell R730xd 2x iti ake i te pokapū raraunga Equinix Tier IV i Amsterdam? Anei i konei 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai i te $199 i roto i te Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai i te $99! Pānuihia mo Me pehea te hanga hanganga corp. akomanga ki te whakamahi o Dell R730xd E5-2650 v4 tūmau utu 9000 euros mo te pene?

Source: will.com

Tāpiri i te kōrero