Si taxaddar leh uga fakar ka hor intaadan isticmaalin Docker-in-Docker CI ama deegaanka tijaabada

Si taxaddar leh uga fakar ka hor intaadan isticmaalin Docker-in-Docker CI ama deegaanka tijaabada

Docker-in-Docker waa deegaan daemon Docker ah oo la taaban karo oo ku dhex socda weelka laftiisa si loo dhiso sawirada weelka. Ujeedada ugu weyn ee loo abuuray Docker-in-Docker waxay ahayd in laga caawiyo horumarinta Docker lafteeda. Dad badan ayaa u isticmaala inay maamulaan Jenkins CI. Tani waxay u muuqataa wax caadi ah marka hore, laakiin markaa waxaa soo baxa dhibaatooyin laga hortagi karo in lagu rakibo Docker weelka Jenkins CI. Maqaalkani wuxuu kuu sheegayaa sida tan loo sameeyo. Haddii aad xiisaynayso xalka ugu dambeeya iyada oo aan faahfaahin, kaliya akhri qaybta ugu dambeysa ee maqaalka, "Xalinta Dhibaatada."

Si taxaddar leh uga fakar ka hor intaadan isticmaalin Docker-in-Docker CI ama deegaanka tijaabada

Docker-in-Docker: "Wanaagsan"

In ka badan laba sano ka hor waxaan geliyay Docker calanka -mudnaan leh oo qoray version ugu horeysay ee dind. Hadafku wuxuu ahaa in laga caawiyo kooxda xudunta u ah inay si dhakhso leh u horumariyaan Docker. Kahor Docker-in-Docker, wareegga horumarka caadiga ah wuxuu u ekaa sidan:

  • jabsiga;
  • dhis;
  • joojinta orodka Docker daemon;
  • bilaabista daemon cusub oo Docker;
  • tijaabinaya;
  • ku celi wareegga.

Haddii aad rabto inaad sameyso shir qurux badan, oo la soo saari karo (taas oo ah, weel), ka dibna waxay noqotay mid aad u adag:

  • jabsiga;
  • Hubi in nooca shaqada ee Docker uu socdo;
  • ku dhis Docker cusub oo leh Docker duug ah;
  • joojinta Docker daemon;
  • bilow daemon cusub oo Docker;
  • imtixaan;
  • joojinta daemon cusub ee Docker;
  • ku celi

Imaanshaha Docker-in-Docker, nidaamku wuu fududaaday:

  • jabsiga;
  • kulanka + bilaabista hal marxalad;
  • ku celi wareegga.

Miyaanay sidan aad uga roonayn?

Si taxaddar leh uga fakar ka hor intaadan isticmaalin Docker-in-Docker CI ama deegaanka tijaabada

Docker-in-Docker: "xun"

Si kastaba ha ahaatee, liddi ku ah caqiidada caanka ah, Docker-in-Docker maaha 100% xiddigaha, ponies iyo unicorns. Waxaan ula jeedaa inay jiraan dhowr arrimood oo horumariye u baahan yahay inuu ka warqabo.

Mid ka mid ah wuxuu khuseeyaa LSM-yada (Xubabka amniga Linux) sida AppArmor iyo SELinux: marka weel la wado, "Docker-ka gudaha" waxaa laga yaabaa inuu isku dayo inuu isticmaalo profiles amniga kaasoo khilaafaya ama jahawareerin doona "Dockerka dibadda". Tani waa mushkiladda ugu adag ee la xalliyo marka la isku dayo in la isku daro dhaqangelinta asalka ah ee calanka-mudnaanta leh. Isbeddelladaygu way shaqeeyeen oo dhammaan imtixaannada waxay ku gudbi doonaan mashiinka Debian iyo Ubuntu tijaabinta VM-yada, laakiin way shilmi doonaan oo ku guban doonaan mashiinka Michael Crosby (wuxuu lahaa Fedora sida aan xasuusto). Ma xasuusan karo sababta dhabta ah ee dhibaatada, laakiin waxaa laga yaabaa inay ahayd sababtoo ah Mike waa nin caqli badan oo la shaqeeya SELINUX=enforce (Waxaan isticmaalay AppArmor) iyo isbeddeladayda ma aysan tixgelin SELinux profiles.

Docker-in-Docker: "Evil"

Arrinka labaad waa darawallada kaydinta Docker. Markaad maamusho Docker-in-Docker, Docker-ka dibadda wuxuu ku socdaa nidaamka faylka caadiga ah (EXT4, BTRFS, ama wax kasta oo aad haysato) iyo Docker-ka gudaha wuxuu ku shaqeeyaa nidaamka nuqul-qorista (AUFS, BTRFS, Khariidadda Aaladda). , iwm.), taas oo ku xidhan waxa loo habeeyey isticmaalka Docker dibadda ah). Tani waxay abuurtaa iskudhafyo badan oo aan shaqayn doonin. Tusaale ahaan, ma awoodi doontid inaad ku socodsiiso AUFS dusha sare ee AUFS.

Haddii aad ku maamusho BTRFS korka BTRFS, waa in ay shaqeyso marka hore, laakiin mar haddii ay jiraan cod-hoosaadyo buul leh, tirtirka mugga hoose ee waalidka wuu guuldarraysan doonaa. Qalabka Khariidadda Aaladda ma laha meel magac ah, markaa haddii dhowr Docker ay ku shaqeeyaan isla mashiinka, dhammaantood waxay awoodi doonaan inay arkaan (oo ay saameyn ku yeeshaan) sawirada midba midka kale iyo qalabka kaydinta weelka. Tani waa xun.

Waxaa jira habab lagu xalliyo qaar badan oo ka mid ah dhibaatooyinkan. Tusaale ahaan, haddii aad rabto inaad ku isticmaasho AUFS gudaha Docker gudaha, kaliya u rog faylka / var / lib / docker mugga oo waad fiicnaan doontaa. Docker waxa uu ku daray qaar ka mid ah magacyada saldhigyada magacyada bartilmaameedka Khariidadaha Qalabka si haddii wicitaanno badan oo Docker ah ay ku socdaan isla mashiinka, ayan ku tallaabsan doonin midba midka kale.

Si kastaba ha ahaatee, dejinta noocan oo kale ah ma aha mid fudud, sida laga arki karo kuwan maqaalada ku yaal bakhaarka dind ee GitHub.

Docker-in-Docker: Way ka sii daraysaa

Ka warran kaydka dhismaha? Tani waxay sidoo kale noqon kartaa mid aad u adag. Dadku waxay inta badan i weydiiyaan "haddii aan ordayo Docker-in-Docker, sideen u isticmaali karaa sawirada lagu martigaliyay martidageyga halkii aan wax walba dib ugu soo celin lahaa Docker-ka gudaha"

Qaar ka mid ah dadka ganacsiga leh ayaa isku dayay in ay ku xidhaan /var/lib/docker ka martida loo yahay weel Docker-in-Docker ah. Mararka qaarkood waxay la wadaagaan /var/lib/docker weel badan.

Si taxaddar leh uga fakar ka hor intaadan isticmaalin Docker-in-Docker CI ama deegaanka tijaabada
Ma doonaysaa inaad xogtaada kharribto? Sababtoo ah tani waa dhab ahaan waxa dhaawici doona xogtaada!

Daemon-ka Docker waxaa si cad loogu talagalay inuu si gaar ah u galo /var/lib/docker. Wax kale waa inuu "taabto, gashaa, ama soo bandhigaa" faylal kasta oo Docker ah oo ku yaal galkan.

Maxay tani sidaas u tahay? Sababtoo ah tani waa natiijada mid ka mid ah casharradii ugu adkaa ee la barto iyadoo la horumarinayo dotCloud. Matoorka weelka dotCloud wuxuu ku shaqeeyaa isagoo leh habab badan oo gelitaanka /var/lib/dotcloud isku mar ah. Khiyaamada dhagarta ah sida beddelka faylalka atomiga (halkii tafatirka goobta), koodhka basbaaska oo leh talobixin iyo quful qasab ah, iyo tijaabooyin kale oo leh nidaamyo sugan sida SQLite iyo BDB had iyo jeer ma shaqayn. Markii aan dib u habeyn ku sameynay mashiinka weelka, kaas oo ugu dambeyntii noqday Docker, mid ka mid ah go'aannada naqshadeynta ee weyn waxay ahayd in la xoojiyo dhammaan hawlgallada weelka ee hoos yimaada hal daemon si meesha looga saaro dhammaan wax-qabadka macna-darrada ah.

Qalad ha ii fahmin: gabi ahaanba waa suurtogal in la sameeyo wax wanaagsan, la isku halayn karo oo degdeg ah taas oo ku lug leh habab badan iyo xakamaynta isbarbardhigga casriga ah. Laakiin waxaan u maleyneynaa inay fududahay oo ay fududahay in la qoro oo la ilaaliyo koodka iyadoo la adeegsanayo Docker oo ah ciyaaryahanka kaliya.

Tani waxay ka dhigan tahay haddii aad la wadaagto /var/lib/docker directory inta u dhaxaysa tusaalooyin badan oo Docker ah, waxaad la kulmi doontaa dhibaatooyin. Dabcan, tani way shaqayn kartaa, gaar ahaan marxaladaha hore ee imtixaanka. "Dhageyso, Ma, waxaan u maamuli karaa ubuntu sidii docker!" Laakin isku day shay aad u adag, sida in aad sawir isku mid ah ka soo jiiddo laba xaaladood oo kala duwan, waxaadna arki doontaa aduunka oo gubanaya.

Tani waxay ka dhigan tahay in haddii nidaamka CI-gaagu uu dhiso oo dib u dhiso, mar kasta oo aad dib u bilowdo weelka Docker-in-Docker, waxaad halis u tahay inaad nuke ku riddo khasnadiisa. Tani gabi ahaanba ma wanaagsana!

Dhibaatooyinka Dhibaatada

Aan dib u qaadno. Runtii ma u baahan tahay Docker-in-Docker ama ma waxaad rabtaa inaad awood u yeelatid inaad socodsiiso Docker oo aad dhisto oo socodsiiso weelasha iyo sawirada nidaamkaaga CI halka nidaamka CI laftiisa uu weel ku jiro?

Waxaan sharad ku leeyahay dadka intiisa badani waxay rabaan ikhtiyaarka dambe, taasoo la micno ah inay rabaan nidaamka CI sida Jenkins si uu u awoodo inuu socodsiiyo weelasha. Sida ugu fudud ee tan loo sameeyo waa in aad si fudud u geliso godka Docker weelka CI-gaaga oo aad ku xidho calanka -v.

Si fudud u dhig, markaad socodsiiso weelka CI-gaaga (Jenkins ama wax kale), halkii aad wax ku jabsan lahayd Docker-in-Docker, ku bilow khadka:

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

Weelkan hadda waxa uu geli doonaa godka Docker-ka oo sidaas awgeed waxa uu awood u leeyahay in uu ku shaqeeyo weelasha. Marka laga reebo in halkii ay ka shaqayn lahayd weelasha "carruurta", waxay soo saari doontaa weelasha "walaalaha".

Isku day tan adigoo isticmaalaya sawirka rasmiga ah ee docker (oo ka kooban Docker binary):

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

Waxay u egtahay oo u shaqeysaa sida Docker-in-Docker, laakiin maaha Docker-in-Docker: marka weelkani uu abuuro weelal dheeri ah, waxaa lagu abuuri doonaa Docker-ka ugu sareeya. Ma la kulmi doontid waxyeellooyinka ka soo raaca buulka oo kaydka shirka waxaa lala wadaagi doonaa wicitaanno badan.

Fiiro gaar ah: Noocyadii hore ee maqaalkan ayaa lagula taliyay in lagu xidho binary-ga Docker-ka ee martigeliyaha iyo weelka. Tani waxay hadda noqotay mid aan la isku halayn karin maadaama mishiinka Docker uusan daboolin maktabadaha taagan ama u dhow.

Markaa, haddii aad rabto inaad isticmaasho Docker ka Jenkins CI, waxaad haysataa 2 ikhtiyaar:
ku rakibida Docker CLI iyadoo la adeegsanayo nidaamka baakadaha sawirka aasaasiga ah (tusaale ahaan haddii sawirkaagu ku saleysan yahay Debian, isticmaal xirmooyinka .deb), adoo isticmaalaya Docker API.

Xayeysiisyada qaar πŸ™‚

Waad ku mahadsan tahay inaad nala joogto. Ma jeceshahay maqaalladayada? Ma doonaysaa inaad aragto wax badan oo xiiso leh? Nagu taageer adigoo dalbanaya amar ama kula talinaya asxaabta, Cloud VPS ee horumariyeyaasha laga bilaabo $ 4.99, analoog gaar ah oo ah server-yada heerka gelitaanka, kaas oo anaga aanu adiga kuu hindisay: Xaqiiqada oo dhan ee ku saabsan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps laga bilaabo $19 ama sida loo wadaago server? (waxaa laga heli karaa RAID1 iyo RAID10, ilaa 24 cores iyo ilaa 40GB DDR4).

Dell R730xd 2x ka jaban xarunta xogta Equinix Tier IV ee Amsterdam? Kaliya halkan 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV laga bilaabo $199 Nederlaan! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - laga bilaabo $99! Wax ka akhri Sida loo dhiso infrastructure Corp. fasalka iyadoo la adeegsanayo Dell R730xd E5-2650 v4 servers oo qiimahoodu yahay 9000 euro dinaar?

Source: www.habr.com

Add a comment