Mieritrereta tsara alohan'ny hampiasana Docker-in-Docker ho an'ny CI na tontolo fitsapana

Mieritrereta tsara alohan'ny hampiasana Docker-in-Docker ho an'ny CI na tontolo fitsapana

Docker-in-Docker dia tontolo daemon Docker virtoaly mandeha ao anatin'ilay fitoeran-javatra mba hananganana sary container. Ny tanjona lehibe amin'ny famoronana Docker-in-Docker dia ny hanampy amin'ny fampivoarana ny Docker. Olona maro no mampiasa azy io mba hampandehanana ny Jenkins CI. Toa mahazatra izany amin'ny voalohany, fa avy eo dia misy olana azo sorohina amin'ny fametrahana Docker ao anaty container Jenkins CI. Ity lahatsoratra ity dia milaza aminao ny fomba hanaovana izany. Raha liana amin'ny vahaolana farany tsy misy tsipiriany ianao, dia vakio fotsiny ny fizarana farany amin'ny lahatsoratra, "Famahana ny olana."

Mieritrereta tsara alohan'ny hampiasana Docker-in-Docker ho an'ny CI na tontolo fitsapana

Docker-in-Docker: "Tsara"

Maherin'ny roa taona lasa izay dia napetraka tao amin'ny Docker aho sainam-pirenena – nahazo tombontsoa sy nanoratra dikan-teny voalohany amin'ny dind. Ny tanjona dia ny hanampy ny ekipa fototra hamolavola haingana kokoa an'i Docker. Talohan'ny Docker-in-Docker, ny tsingerin'ny fampandrosoana mahazatra dia toy izao:

  • hackity hack;
  • manorina;
  • fampijanonana daemon Docker mihazakazaka;
  • fandefasana daemon Docker vaovao;
  • fitsapana;
  • avereno ny tsingerina.

Raha te hanao fivoriambe tsara tarehy sy azo averina ianao (izany hoe ao anaty kaontenera), dia lasa sarotra kokoa izany:

  • hackity hack;
  • ataovy azo antoka fa mandeha ny dikan-teny Docker miasa;
  • manangana Docker vaovao miaraka amin'ny Docker taloha;
  • atsaharo ny daemon Docker;
  • manomboka daemon Docker vaovao;
  • fitsapana;
  • atsaharo ny daemon Docker vaovao;
  • mamerina.

Miaraka amin'ny fahatongavan'ny Docker-in-Docker dia lasa tsotra kokoa ny dingana:

  • hackity hack;
  • fivoriambe + fanombohana amin'ny dingana iray;
  • avereno ny tsingerina.

Tsy tsara kokoa ve izany fomba izany?

Mieritrereta tsara alohan'ny hampiasana Docker-in-Docker ho an'ny CI na tontolo fitsapana

Docker-in-Docker: "Ratsy"

Na izany aza, mifanohitra amin'ny finoana malaza, Docker-in-Docker dia tsy kintana 100%, soavaly ary unicorn. Ny tiako holazaina dia misy olana maromaro tokony ho fantatry ny developer.

Ny iray amin'izy ireo dia mikasika ny LSMs (Linux security modules) toy ny AppArmor sy SELinux: rehefa mitantana kaontenera, ny "Docker anatiny" dia mety manandrana mampihatra ny mombamomba ny fiarovana izay hifandona na hanakorontana ny "Docker ivelany". Ity no olana sarotra indrindra hamahana rehefa manandrana manambatra ny fampiharana voalohany ny sainam-pirenena -privileged. Nandeha ny fanovana nataoko ary nandalo tamin'ny milina Debian-ko sy ny VM fitsapana Ubuntu ny fitsapana rehetra, saingy nianjera sy nirehitra teo amin'ny masinin'i Michael Crosby izy ireo (manana Fedora izy raha tsiahivina). Tsy tadidiko ny tena anton'ilay olana, fa angamba satria lehilahy hendry i Mike izay miasa amin'ny SELINUX=enforce (nampiasa AppArmor aho) ary ny fanovana nataoko dia tsy nandray ny mombamomba ny SELinux.

Docker-in-Docker: "Ratsy"

Ny olana faharoa dia miaraka amin'ny mpamily fitahirizana Docker. Rehefa mihazakazaka Docker-in-Docker ianao, ny Docker ivelany dia mihazakazaka eo an-tampon'ny rafitra rakitra mahazatra (EXT4, BTRFS, na izay anananao) ary ny Docker anatiny dia mihazakazaka eo an-tampon'ny rafitra kopia amin'ny fanoratana (AUFS, BTRFS, Device Mapper , sns.). , miankina amin'ny zavatra namboarina hampiasana Docker ivelany). Izany dia miteraka fitambarana maro izay tsy hahomby. Ohatra, tsy afaka mampandeha AUFS eo ambonin'ny AUFS ianao.

Raha mitantana BTRFS eo an-tampon'ny BTRFS ianao, dia tokony hiasa amin'ny voalohany, fa rehefa misy zana-bolongana misy akany dia tsy hahomby ny famafana ny subvolume ray aman-dreny. Ny maody Device Mapper dia tsy manana anaran-toerana, ka raha misy tranga Docker marobe no mihazakazaka izany amin'ny milina iray ihany, dia samy ho afaka hahita (ary hisy fiantraikany) ny sary amin'ny tsirairay sy amin'ny fitaovana backup. Ratsy izany.

Misy vahaolana hamahana ny maro amin'ireo olana ireo. Ohatra, raha te hampiasa AUFS ao amin'ny Docker anatiny ianao dia avereno fotsiny ny lahatahiry / var / lib / docker ho boky dia ho tsara ianao. Docker dia nampian'ny anaran'ny anarana fototra ho an'ny anaran'ny lasibatra Device Mapper ka raha misy antso Docker maro mandeha amin'ny milina iray, dia tsy hifanitsaka izy ireo.

Na izany aza, ny fananganana toy izany dia tsy tsotra, araka ny hita amin'ireo lahatsoratra ao amin'ny tahiry dind ao amin'ny GitHub.

Docker-in-Docker: Miharatsy izany

Ahoana ny amin'ny fananganana cache? Mety ho sarotra ihany koa izany. Matetika ny olona no manontany ahy hoe "raha mihazakazaka Docker-in-Docker aho, ahoana no ahafahako mampiasa sary nampiantranoina tamin'ny mpampiantrano ahy fa tsy mamerina ny zava-drehetra ao amin'ny Docker anatiny"?

Ny olona be saina sasany dia nanandrana namatotra / var / lib / docker avy amin'ny mpampiantrano mankany amin'ny container Docker-in-Docker. Indraindray izy ireo dia mizara /var/lib/docker miaraka amin'ny kaontenera marobe.

Mieritrereta tsara alohan'ny hampiasana Docker-in-Docker ho an'ny CI na tontolo fitsapana
Te hanimba ny angonao ve ianao? Satria izany indrindra no hanimba ny angonao!

Ny daemon Docker dia natao mazava tsara mba hanana fidirana manokana amin'ny /var/lib/docker. Tsy misy na inona na inona tokony "hikitika, mikitika, na manodina" izay rakitra Docker hita ao amin'ity lahatahiry ity.

Nahoana no toy izany? Satria ity no vokatry ny iray amin'ireo lesona sarotra indrindra nianarana nandritra ny fampivoarana ny dotCloud. Ny motera container dotCloud dia nihazakazaka tamin'ny alΓ lan'ny fananana dingana maro miditra /var/lib/dotcloud miaraka. Ny hafetsena toy ny fanoloana rakitra atomika (fa tsy ny fanovana eo amin'ny toerana), ny kaody dipoavatra miaraka amin'ny toro-hevitra sy hidin-trano tsy maintsy atao, ary ny fanandramana hafa miaraka amin'ny rafitra azo antoka toy ny SQLite sy BDB dia tsy nandeha foana. Rehefa nanamboatra ny maotera container izahay, izay lasa Docker tamin'ny farany, ny iray amin'ireo fanapahan-kevitra lehibe momba ny famolavolana dia ny hanamafisana ny fiasan'ny kaontenera rehetra eo ambanin'ny daemon tokana mba hanafoanana ny hadalana rehetra.

Aza diso aho: azo atao tanteraka ny manao zavatra tsara, azo ianteherana ary haingana izay misy dingana maro sy fanaraha-maso mifanitsy maoderina. Saingy heverinay fa tsotra sy mora kokoa ny manoratra sy mitazona kaody mampiasa Docker ho mpilalao tokana.

Midika izany fa raha mizara ny lahatahiry / var / lib / docker eo anelanelan'ny tranga Docker marobe ianao dia hanana olana. Mazava ho azy fa afaka miasa izany, indrindra amin'ny dingana voalohany amin'ny fitsapana. "Henoy, ry Ma, afaka mihazakazaka ubuntu ho toy ny docker aho!" Fa manandrama zavatra sarotra kokoa, toy ny fisintonana sary iray avy amin'ny tranga roa samy hafa, dia ho hitanao fa mirehitra izao tontolo izao.

Midika izany fa raha manangana sy manangana indray ny rafitra CI anao, isaky ny mamerina ny fitoeranao Docker-in-Docker ianao dia mety hampidi-doza ny nuke ao anaty cache. Tsy mahafinaritra mihitsy izany!

niresaka

Andeha isika hihemotra. Tena mila Docker-in-Docker ve ianao sa te ho afaka hampandeha an'i Docker sy hanorina sy hampandeha kaontenera sy sary avy amin'ny rafitra CI anao raha toa ka ao anaty fitoeran-javatra ihany io rafitra CI io?

Manantena aho fa ny ankamaroan'ny olona dia maniry ny safidy farany, midika izany fa mila rafitra CI toa an'i Jenkins izy ireo mba ho afaka mitantana container. Ary ny fomba tsotra indrindra hanaovana izany dia ny fampidirana fotsiny ny socket Docker ao anaty container CI anao ary ampifandraiso amin'ny saina -v.

Raha tsorina, rehefa mitantana ny kaontinao CI (Jenkins na hafa ianao), fa tsy mijirika zavatra miaraka amin'ny Docker-in-Docker, atombohy amin'ny tsipika:

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

Ity kaontenera ity dia hanana fidirana amin'ny socket Docker ary noho izany dia afaka mitondra container. Afa-tsy ny fampandehanana kaontenera "ankizy", dia handefa kaontenera "mpiray tam-po".

Andramo amin'ny fampiasana ny sary docker ofisialy (izay misy ny binary Docker):

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

Toa sy miasa toa an'i Docker-in-Docker izy io, fa tsy Docker-in-Docker: rehefa mamorona container fanampiny ity container ity dia hoforonina ao amin'ny Docker ambony indrindra izy ireo. Tsy hiaina ny voka-dratsin'ny akany ianao ary ny cache fivoriambe dia hozaraina amin'ny antso maro.

Fanamarihana: Ny dikan-teny teo aloha amin'ity lahatsoratra ity dia nanoro hevitra ny mampifandray ny Docker binary avy amin'ny mpampiantrano mankany amin'ny container. Lasa tsy azo ianteherana intsony izany satria ny motera Docker dia tsy mandrakotra tranomboky static na akaiky.

Noho izany, raha te hampiasa Docker avy amin'ny Jenkins CI ianao dia manana safidy 2 ianao:
fametrahana ny Docker CLI amin'ny fampiasana ny rafitra fonosana sary fototra (izany hoe raha mifototra amin'ny Debian ny sarinao, ampiasao ny fonosana .deb), mampiasa ny Docker API.

Ny doka sasany πŸ™‚

Misaotra anao nijanona niaraka taminay. Tianao ve ny lahatsoratray? Te-hahita votoaty mahaliana kokoa? Tohano izahay amin'ny fametrahana baiko na fanolorana amin'ny namana, cloud VPS ho an'ny mpamorona manomboka amin'ny $4.99, analogue tsy manam-paharoa amin'ny mpizara ambaratonga fidirana, izay noforoninay ho anao: Ny marina rehetra momba ny VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps avy amin'ny $19 na ahoana no hizarana mpizara? (misy miaraka amin'ny RAID1 sy RAID10, hatramin'ny 24 cores ary hatramin'ny 40GB DDR4).

Dell R730xd 2x mora kokoa amin'ny foibe data Equinix Tier IV any Amsterdam? Eto ihany 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV manomboka amin'ny $199 any Holandy! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - manomboka amin'ny $99! Vakio ny momba ny Ahoana ny fananganana infrastructure corp. kilasy amin'ny fampiasana mpizara Dell R730xd E5-2650 v4 mitentina 9000 euros amin'ny denaria iray?

Source: www.habr.com

Add a comment