Reflechi ak anpil atansyon anvan ou sèvi ak Docker-in-Docker pou CI oswa anviwònman tès

Reflechi ak anpil atansyon anvan ou sèvi ak Docker-in-Docker pou CI oswa anviwònman tès

Docker-in-Docker se yon anviwònman demon Virtualized Docker ki kouri nan veso a li menm pou konstwi imaj veso. Objektif prensipal kreye Docker-in-Docker se te ede devlope Docker tèt li. Anpil moun sèvi ak li pou kouri Jenkins CI. Sa a sanble nòmal nan premye, men Lè sa a, pwoblèm rive ki ka evite lè w enstale Docker nan yon veso Jenkins CI. Atik sa a di ou kijan pou fè sa. Si w enterese nan solisyon final la san detay, jis li dènye seksyon atik la, "Rezoud pwoblèm nan."

Reflechi ak anpil atansyon anvan ou sèvi ak Docker-in-Docker pou CI oswa anviwònman tès

Docker-in-Docker: "Bon"

Plis pase de zan de sa mwen mete nan Docker drapo –privilejye ak ekri premye vèsyon dind. Objektif la se te ede ekip debaz la devlope Docker pi vit. Anvan Docker-in-Docker, sik devlopman tipik la te sanble ak sa a:

  • hackity Hack;
  • bati;
  • kanpe yon demon Docker k ap kouri;
  • lanse yon nouvo demon Docker;
  • tès;
  • repete sik la.

Si ou te vle fè yon bèl, asanble repwodiktif (ki se, nan yon veso), Lè sa a, li te vin pi konplike:

  • hackity Hack;
  • asire w ke yon vèsyon k ap travay nan Docker ap kouri;
  • bati nouvo Docker ak ansyen Docker;
  • sispann Docker demon;
  • kòmanse yon nouvo demon Docker;
  • tès;
  • sispann nouvo demon Docker;
  • repete.

Avèk avenman Docker-in-Docker, pwosesis la vin pi senp:

  • hackity Hack;
  • asanble + lanse nan yon sèl etap;
  • repete sik la.

Èske li pa pi bon fason sa a?

Reflechi ak anpil atansyon anvan ou sèvi ak Docker-in-Docker pou CI oswa anviwònman tès

Docker-in-Docker: "Move"

Sepandan, kontrèman ak kwayans popilè, Docker-in-Docker se pa 100% zetwal, pone ak likorn. Ki sa mwen vle di se ke gen plizyè pwoblèm ke yon pwomotè bezwen yo dwe okouran de.

Youn nan yo konsène LSM (modil sekirite Linux) tankou AppArmor ak SELinux: lè w ap kouri yon veso, "Docker entèn la" ka eseye aplike pwofil sekirite ki pral konfli oswa konfonn "Docker ekstèn lan". Sa a se pwoblèm ki pi difisil pou rezoud lè w ap eseye rantre aplikasyon orijinal la nan drapo a privilejye. Chanjman mwen yo te travay ak tout tès yo ta pase sou machin Debian mwen an ak VM tès Ubuntu, men yo ta aksidan ak boule sou machin Michael Crosby a (li te gen Fedora jan mwen sonje). Mwen pa ka sonje kòz egzak pwoblèm nan, men li ka te paske Mike se yon nèg ki gen bon konprann ki travay ak SELINUX=enforce (mwen te itilize AppArmor) ak chanjman mwen yo pa t 'pran pwofil SELinux an kont.

Docker-in-Docker: "Sa ki mal"

Dezyèm pwoblèm nan se ak chofè depo Docker. Lè ou kouri Docker-in-Docker, Docker ekstèn kouri sou tèt yon sistèm dosye regilye (EXT4, BTRFS, oswa kèlkeswa sa ou genyen) ak Docker entèn kouri sou tèt yon sistèm kopi-sou-ekri (AUFS, BTRFS, Device Mapper). , elatriye). , tou depann de sa ki configuré pou itilize ekstèn Docker). Sa a kreye anpil konbinezon ki pa pral travay. Pa egzanp, ou p'ap ka kouri AUFS sou tèt AUFS.

Si ou kouri BTRFS sou tèt BTRFS, li ta dwe travay nan premye, men yon fwa gen enbrike subvolumes, efase subvolume paran an ap echwe. Modil la Device Mapper pa gen okenn espas non, kidonk si plizyè egzanp Docker ap kouri li sou menm machin nan, yo tout pral kapab wè (ak enfliyanse) imaj yo youn sou lòt ak sou aparèy backup veso yo. Sa a se move.

Gen solisyon pou rezoud anpil nan pwoblèm sa yo. Pou egzanp, si ou vle sèvi ak AUFS nan Docker entèn, jis vire folder nan /var/lib/docker nan yon volim epi ou pral byen. Docker te ajoute kèk espas non baz nan non sib Device Mapper pou ke si plizyè apèl Docker ap kouri sou menm machin nan, yo pa pral mache sou youn ak lòt.

Sepandan, konfigirasyon sa a se pa nan tout senp, jan yo ka wè nan sa yo atik nan repozitwa dind la sou GitHub.

Docker-in-Docker: Li vin pi mal

Ki sa ki sou kachèt la bati? Sa a kapab tou byen difisil. Moun yo souvan mande m "si mwen ap kouri Docker-in-Docker, ki jan mwen ka itilize imaj ki anime sou lame mwen an olye pou yo rale tout bagay tounen nan Docker entèn mwen an"?

Gen kèk moun inisyateur ki te eseye mare /var/lib/docker soti nan lame a nan yon veso Docker-in-Docker. Pafwa yo pataje /var/lib/docker ak plizyè resipyan.

Reflechi ak anpil atansyon anvan ou sèvi ak Docker-in-Docker pou CI oswa anviwònman tès
Ou vle koripsyon done ou yo? Paske sa a se egzakteman sa ki pral domaje done ou!

Daemon Docker la te klèman fèt pou gen aksè eksklizif nan /var/lib/docker. Pa gen lòt bagay ki ta dwe "manyen, pike, oswa pouse" nenpòt ki dosye Docker ki sitiye nan katab sa a.

Poukisa se konsa? Paske sa a se rezilta youn nan leson ki pi difisil yo aprann pandan y ap devlope dotCloud. Motè veso dotCloud la te kouri lè li te gen plizyè pwosesis aksè nan /var/lib/dotcloud ansanm. Ke trik nouvèl atizanal tankou ranplasman fichye atomik (olye pou yo koreksyon an plas), kòd peppering ak kadna konsiltatif ak obligatwa, ak lòt eksperyans ak sistèm sekirite tankou SQLite ak BDB pa t 'toujou travay. Lè nou t ap redesign motè veso nou an, ki te vin tounen Docker, youn nan gwo desizyon konsepsyon yo se te konsolide tout operasyon veso yo anba yon sèl demon pou elimine tout istwa san sans.

Pa fè m mal: li se antyèman posib fè yon bagay bon, serye ak rapid ki enplike pwosesis miltip ak kontwòl paralèl modèn. Men, nou panse li pi senp ak pi fasil pou ekri ak kenbe kòd lè l sèvi avèk Docker kòm jwè a sèlman.

Sa vle di ke si ou pataje anyè /var/lib/docker ant plizyè ka Docker, w ap gen pwoblèm. Natirèlman, sa a ka travay, espesyalman nan premye etap yo nan tès la. "Koute, Ma, mwen ka kouri ubuntu kòm yon docker!" Men, eseye yon bagay ki pi konplèks, tankou rale menm imaj la nan de ka diferan, epi ou pral wè mond lan boule.

Sa vle di ke si sistèm CI ou fè bati ak rekonstwi, chak fwa ou rekòmanse veso Docker-in-Docker ou a, ou riske jete yon nuke nan kachèt li. Sa pa fre ditou!

Solisyon an

Ann fè yon pa dèyè. Èske ou reyèlman bezwen Docker-in-Docker oswa èske ou jis vle pou kapab kouri Docker ak bati ak kouri resipyan ak imaj ki soti nan sistèm CI ou pandan ke sistèm sa a CI tèt li nan yon veso?

Mwen parye pifò moun vle opsyon nan lèt, sa vle di yo vle yon sistèm CI tankou Jenkins pou kapab kouri kontenè. Ak fason ki pi fasil pou fè sa se tou senpleman mete yon priz Docker nan veso CI ou a epi asosye li ak drapo a -v.

Senpleman mete, lè ou kouri veso CI ou a (Jenkins oswa lòt), olye pou yo pirate yon bagay ansanm ak Docker-in-Docker, kòmanse li ak liy lan:

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

Veso sa a pral kounye a gen aksè a priz Docker a epi kidonk li pral kapab kouri resipyan yo. Eksepte ke olye pou yo kouri resipyan "pitit", li pral lanse resipyan "frè ak sè".

Eseye sa a lè l sèvi avèk imaj Docker ofisyèl la (ki gen binè Docker la):

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

Li sanble ak travay tankou Docker-in-Docker, men li pa Docker-in-Docker: lè veso sa a kreye resipyan adisyonèl, yo pral kreye nan Docker nan nivo siperyè. Ou pa pral fè eksperyans efè segondè yo nan nidifikasyon ak kachèt asanble a pral pataje atravè plizyè apèl.

Remak: Vèsyon anvan atik sa a konseye lyen binè Docker soti nan lame a nan veso a. Sa a te vin tounen enfidèl kòm motè Docker la pa kouvri bibliyotèk estatik oswa pre-estatik ankò.

Se konsa, si ou vle sèvi ak Docker soti nan Jenkins CI, ou gen 2 opsyon:
enstale Docker CLI lè l sèvi avèk sistèm anbalaj imaj debaz la (sa vle di si imaj ou a baze sou Debian, sèvi ak pakè .deb), lè l sèvi avèk API Docker.

Kèk piblisite 🙂

Mèsi paske w rete avèk nou. Ou renmen atik nou yo? Vle wè plis kontni enteresan? Sipòte nou pa mete yon lòd oswa rekòmande pou zanmi, nwaj VPS pou devlopè soti nan $ 4.99, yon analogue inik nan sèvè nivo antre, ki te envante pa nou pou ou: Tout verite sou VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps soti nan $ 19 oswa ki jan yo pataje yon sèvè? (disponib ak RAID1 ak RAID10, jiska 24 nwayo ak jiska 40GB DDR4).

Dell R730xd 2 fwa pi bon mache nan sant done Equinix Tier IV nan Amstèdam? Sèlman isit la 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV soti nan $199 nan Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - soti nan $ 99! Li sou Ki jan yo bati enfrastrikti corp. klas ak itilizasyon Dell R730xd E5-2650 v4 serveurs ki vo 9000 ero pou yon jounen travay?

Sous: www.habr.com

Add nouvo kòmantè