Ronu daradara ṣaaju lilo Docker-in-Docker fun CI tabi agbegbe idanwo

Ronu daradara ṣaaju lilo Docker-in-Docker fun CI tabi agbegbe idanwo

Docker-in-Docker jẹ agbegbe Docker daemon ti o ni agbara ti o nṣiṣẹ laarin eiyan funrararẹ lati kọ awọn aworan eiyan. Idi akọkọ ti ṣiṣẹda Docker-in-Docker ni lati ṣe iranlọwọ idagbasoke Docker funrararẹ. Ọpọlọpọ eniyan lo lati ṣiṣẹ Jenkins CI. Eyi dabi deede ni akọkọ, ṣugbọn lẹhinna awọn iṣoro dide ti o le yago fun nipa fifi Docker sinu apoti Jenkins CI kan. Nkan yii sọ fun ọ bi o ṣe le ṣe eyi. Ti o ba nifẹ si ojutu ikẹhin laisi awọn alaye, kan ka apakan ti o kẹhin ti nkan naa, “Yiyanju iṣoro naa.”

Ronu daradara ṣaaju lilo Docker-in-Docker fun CI tabi agbegbe idanwo

Docker-in-Docker: "O dara"

Diẹ sii ju ọdun meji sẹhin Mo fi sinu Docker asia -anfani ati kọ akọkọ ti ikede dind. Ibi-afẹde naa ni lati ṣe iranlọwọ fun ẹgbẹ mojuto idagbasoke Docker ni iyara. Ṣaaju Docker-in-Docker, ọmọ idagbasoke aṣoju dabi eyi:

  • gige gige;
  • kọ;
  • idaduro Docker daemon ti nṣiṣẹ;
  • ifilọlẹ tuntun Docker daemon;
  • idanwo;
  • tun awọn ọmọ.

Ti o ba fẹ ṣe apejọ ẹlẹwa, ti o le ṣe atunṣe (iyẹn, ninu apo eiyan), lẹhinna o di intricate diẹ sii:

  • gige gige;
  • rii daju pe ẹya ṣiṣẹ ti Docker nṣiṣẹ;
  • kọ Docker tuntun pẹlu Docker atijọ;
  • duro Docker daemon;
  • bẹrẹ daemon Docker tuntun;
  • idanwo;
  • da titun Docker daemon;
  • tun.

Pẹlu dide ti Docker-in-Docker, ilana naa ti di rọrun:

  • gige gige;
  • apejọ + ifilọlẹ ni ipele kan;
  • tun awọn ọmọ.

Ṣe ko dara julọ ni ọna yii?

Ronu daradara ṣaaju lilo Docker-in-Docker fun CI tabi agbegbe idanwo

Docker-in-Docker: "Buburu"

Sibẹsibẹ, ni ilodi si igbagbọ olokiki, Docker-in-Docker kii ṣe 100% awọn irawọ, awọn ponies ati awọn unicorns. Ohun ti Mo tumọ si ni pe ọpọlọpọ awọn ọran lo wa ti olupilẹṣẹ nilo lati mọ.

Ọkan ninu wọn ni ifiyesi awọn LSMs (awọn modulu aabo Linux) gẹgẹbi AppArmor ati SELinux: nigbati o ba n ṣiṣẹ eiyan kan, “Docker inu” le gbiyanju lati lo awọn profaili aabo ti yoo koju tabi dapo “Docker ita”. Eyi ni iṣoro ti o nira julọ lati yanju nigbati o n gbiyanju lati dapọ imuse atilẹba ti asia -anfani. Awọn ayipada mi ṣiṣẹ ati pe gbogbo awọn idanwo yoo kọja lori ẹrọ Debian mi ati awọn VM idanwo Ubuntu, ṣugbọn wọn yoo kọlu ati sun lori ẹrọ Michael Crosby (o ni Fedora bi Mo ṣe ranti). Emi ko le ranti idi gangan ti iṣoro naa, ṣugbọn o le jẹ nitori pe Mike jẹ ọlọgbọn ti o ṣiṣẹ pẹlu SELINUX = fi agbara mu (Mo lo AppArmor) ati awọn iyipada mi ko gba awọn profaili SELinux sinu iroyin.

Docker-in-Docker: "Buburu"

Ọrọ keji jẹ pẹlu awọn awakọ ibi ipamọ Docker. Nigbati o ba ṣiṣẹ Docker-in-Docker, Docker ita n ṣiṣẹ lori oke ti eto faili deede (EXT4, BTRFS, tabi ohunkohun ti o ni) ati Docker inu nṣiṣẹ lori oke ti ẹda-lori-kikọ (AUFS, BTRFS, Mapper Device). , ati bẹbẹ lọ), da lori ohun ti a tunto lati lo Docker ita). Eyi ṣẹda ọpọlọpọ awọn akojọpọ ti kii yoo ṣiṣẹ. Fun apẹẹrẹ, iwọ kii yoo ni anfani lati ṣiṣe AUFS lori oke AUFS.

Ti o ba ṣiṣẹ BTRFS lori oke BTRFS, o yẹ ki o ṣiṣẹ ni akọkọ, ṣugbọn ni kete ti awọn ipin-iwọn itẹ-ẹiyẹ ba wa, piparẹ subvolume obi yoo kuna. Ẹrọ Mapper Ẹrọ ko ni aaye orukọ, nitorinaa ti awọn iṣẹlẹ Docker pupọ ba nṣiṣẹ lori ẹrọ kanna, gbogbo wọn yoo ni anfani lati wo (ati ipa) awọn aworan lori ara wọn ati lori awọn ẹrọ afẹyinti eiyan. Eyi buru.

Awọn ipadasẹhin wa lati yanju ọpọlọpọ awọn iṣoro wọnyi. Fun apẹẹrẹ, ti o ba fẹ lo AUFS ni Docker inu, kan tan / var / lib / docker folda sinu iwọn didun kan ati pe iwọ yoo dara. Docker ti ṣafikun diẹ ninu awọn aaye orukọ ipilẹ si awọn orukọ ibi-afẹde ẹrọ Mapper ki ti awọn ipe Docker pupọ ba nṣiṣẹ lori ẹrọ kanna, wọn kii yoo tẹ ara wọn si.

Sibẹsibẹ, iru iṣeto bẹ ko rọrun rara, bi a ti le rii lati iwọnyi ìwé ni ibi ipamọ dind lori GitHub.

Docker-in-Docker: O buru si

Kini nipa kaṣe kọ? Eyi tun le nira pupọ. Eniyan nigbagbogbo beere lọwọ mi “ti MO ba nṣiṣẹ Docker-in-Docker, bawo ni MO ṣe le lo awọn aworan ti a gbalejo lori agbalejo mi dipo fifa ohun gbogbo pada sinu Docker inu mi”?

Diẹ ninu awọn eniyan alagidi ti gbiyanju lati di /var/lib/docker lati ọdọ agbalejo si apoti Docker-in-Docker kan. Nigba miran wọn pin /var/lib/docker pẹlu ọpọ awọn apoti.

Ronu daradara ṣaaju lilo Docker-in-Docker fun CI tabi agbegbe idanwo
Ṣe o fẹ lati ba data rẹ jẹ bi? Nitori eyi ni pato ohun ti yoo ba data rẹ jẹ!

Docker daemon jẹ apẹrẹ kedere lati ni iraye si iyasoto si /var/lib/docker. Ko si ohun miiran yẹ ki o "fọwọkan, poke, tabi prod" eyikeyi awọn faili Docker ti o wa ninu folda yii.

Kí nìdí tí èyí fi rí bẹ́ẹ̀? Nitori eyi jẹ abajade ti ọkan ninu awọn ẹkọ ti o nira julọ ti a kọ lakoko ti o ndagba dotCloud. Enjini eiyan dotCloud nṣiṣẹ nipasẹ nini awọn ilana pupọ wọle /var/lib/dotcloud nigbakanna. Awọn ẹtan arekereke gẹgẹbi rirọpo faili atomiki (dipo ṣiṣatunṣe ni ibi), koodu ata pẹlu imọran ati awọn titiipa dandan, ati awọn adanwo miiran pẹlu awọn eto aabo bii SQLite ati BDB ko ṣiṣẹ nigbagbogbo. Nigba ti a n ṣe atunṣe ẹrọ eiyan wa, eyiti o di Docker nikẹhin, ọkan ninu awọn ipinnu apẹrẹ nla ni lati sọ dipọ gbogbo awọn iṣẹ eiyan labẹ daemon kan lati pa gbogbo ọrọ isọkusọ kuro.

Maṣe gba mi ni aṣiṣe: o ṣee ṣe patapata lati ṣe nkan ti o dara, igbẹkẹle ati iyara ti o kan awọn ilana pupọ ati iṣakoso afiwera ode oni. Ṣugbọn a ro pe o rọrun ati rọrun lati kọ ati ṣetọju koodu nipa lilo Docker bi ẹrọ orin nikan.

Eyi tumọ si pe ti o ba pin / var/lib/itọsọna docker laarin awọn iṣẹlẹ Docker pupọ, iwọ yoo ni awọn iṣoro. Nitoribẹẹ, eyi le ṣiṣẹ, paapaa ni awọn ipele ibẹrẹ ti idanwo. “Gbọ, Ma, Mo le ṣiṣe ubuntu bi docker!” Ṣugbọn gbiyanju nkan ti o ni eka sii, bii fifa aworan kanna lati awọn iṣẹlẹ oriṣiriṣi meji, ati pe iwọ yoo rii ina aye.

Eyi tumọ si pe ti eto CI rẹ ba ṣe awọn iṣelọpọ ati tun ṣe, ni gbogbo igba ti o ba tun eiyan Docker-in-Docker rẹ bẹrẹ, o ni eewu sisọ nuke kan sinu kaṣe rẹ. Eleyi jẹ ko dara ni gbogbo!

Ojutu si iṣoro naa

Jẹ ki a gbe igbesẹ kan sẹhin. Ṣe o nilo Docker-in-Docker gaan tabi ṣe o kan fẹ lati ni anfani lati ṣiṣẹ Docker ati kọ ati ṣiṣẹ awọn apoti ati awọn aworan lati inu eto CI rẹ lakoko ti eto CI funrararẹ wa ninu apo kan?

Mo tẹtẹ ọpọlọpọ eniyan fẹ aṣayan igbehin, afipamo pe wọn fẹ eto CI bii Jenkins lati ni anfani lati ṣiṣe awọn apoti. Ati pe ọna ti o rọrun julọ lati ṣe eyi ni lati fi iho Docker kan sinu apoti CI rẹ ki o darapọ mọ asia -v.

Ni irọrun, nigba ti o ba ṣiṣẹ eiyan CI rẹ (Jenkins tabi omiiran), dipo gige ohun kan pẹlu Docker-in-Docker, bẹrẹ pẹlu laini:

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

Eiyan yii yoo ni iwọle si iho Docker ati nitorinaa ni anfani lati ṣiṣe awọn apoti. Ayafi pe dipo ṣiṣe awọn apoti “ọmọ”, yoo ṣe ifilọlẹ awọn apoti “ arakunrin”.

Gbiyanju eyi nipa lilo aworan docker osise (eyiti o ni alakomeji Docker):

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

O dabi ati ṣiṣẹ bi Docker-in-Docker, ṣugbọn kii ṣe Docker-in-Docker: nigbati eiyan yii ṣẹda awọn apoti afikun, wọn yoo ṣẹda ni Docker ipele-oke. Iwọ kii yoo ni iriri awọn ipa ẹgbẹ ti itẹ-ẹiyẹ ati pe kaṣe apejọ yoo jẹ pinpin kọja awọn ipe lọpọlọpọ.

Akiyesi: Awọn ẹya iṣaaju ti nkan yii ni imọran sisopọ alakomeji Docker lati agbalejo si eiyan naa. Eyi ti di alaigbagbọ ni bayi bi ẹrọ Docker ko ṣe bo aimi tabi awọn ile-ikawe aimi nitosi.

Nitorinaa, ti o ba fẹ lo Docker lati Jenkins CI, o ni awọn aṣayan 2:
fifi sori ẹrọ Docker CLI nipa lilo eto iṣakojọpọ aworan ipilẹ (ie ti aworan rẹ ba da lori Debian, lo awọn idii .deb), lilo Docker API.

Diẹ ninu awọn ipolowo 🙂

O ṣeun fun gbigbe pẹlu wa. Ṣe o fẹran awọn nkan wa? Ṣe o fẹ lati rii akoonu ti o nifẹ si diẹ sii? Ṣe atilẹyin fun wa nipa gbigbe aṣẹ tabi iṣeduro si awọn ọrẹ, awọsanma VPS fun awọn olupilẹṣẹ lati $ 4.99, afọwọṣe alailẹgbẹ ti awọn olupin ipele-iwọle, eyiti a ṣẹda nipasẹ wa fun ọ: Gbogbo otitọ nipa VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps lati $19 tabi bi o ṣe le pin olupin kan? (wa pẹlu RAID1 ati RAID10, to awọn ohun kohun 24 ati to 40GB DDR4).

Dell R730xd 2x din owo ni Equinix Tier IV ile-iṣẹ data ni Amsterdam? Nikan nibi 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV lati $199 ni Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - lati $99! Ka nipa Bii o ṣe le kọ Infrastructure Corp. kilasi pẹlu awọn lilo ti Dell R730xd E5-2650 v4 apèsè pa 9000 yuroopu fun Penny?

orisun: www.habr.com

Fi ọrọìwòye kun