Kif għamilt Docker ġewwa Docker u x'ħarġu minnu

Hi kollha! Fil tiegħu artikolu preċedenti, Wiegħed li nitkellem dwar it-tmexxija ta 'Docker f'Docker u l-aspetti prattiċi ta' l-użu ta 'din il-lezzjoni. Wasal iż-żmien li żżomm il-wegħda tiegħek. Devopser b'esperjenza probabbilment se joġġezzjona li dawk li għandhom bżonn Docker ġewwa Docker sempliċement jgħaddu s-socket tad-daemon Docker mill-ospitant fil-kontenitur u dan ikun biżżejjed f'99% tal-każijiet. Imma tgħaġġlax titfagħli l-cookies, għax se nitkellmu dwar it-tħaddim ta’ Docker ġewwa Docker. Din is-soluzzjoni għandha ħafna applikazzjonijiet possibbli u dan l-artikolu huwa dwar wieħed minnhom, għalhekk poġġi lura u ddritta idejk quddiemek.

Kif għamilt Docker ġewwa Docker u x'ħarġu minnu

Bidu

Kollox beda f’lejla bix-xita ta’ Settembru meta kont qed inaddaf il-magna li kelli għal $5 fuq Digital Ocean, li kienet iffriżata minħabba l-fatt li Docker kien imla l-24 gigabytes kollha ta’ spazju fuq disk disponibbli bl-immaġini u l-kontenituri tiegħu. L-ironija kienet li dawn l-immaġini u l-kontenituri kollha kienu temporanji u kienu meħtieġa biss biex tiġi ttestjata l-prestazzjoni tal-applikazzjoni tiegħi kull darba li kienet rilaxxata verżjoni ġdida ta 'librerija jew qafas. Ippruvajt nikteb skripts tal-qoxra u nwaqqaf skeda cron biex inaddaf iż-żibel, iżda ma għenitx: kull darba li inevitabbilment spiċċat bl-ispazju tad-diska tas-server tiegħi jittiekel u s-server imdendel (fl-aħjar). F'xi punt, iltqajt ma' artiklu dwar kif tmexxi Jenkins f'kontenitur u kif tista 'toħloq u tħassar build pipelines permezz ta' socket daemon docker mibgħut fih. Għoġobni l-idea, imma ddeċidejt li mmur lil hinn u nipprova nesperimenta b'docker li jaħdem direttament ġewwa Docker. F'dak iż-żmien, deherli soluzzjoni kompletament loġika li tniżżel immaġini Docker u toħloq kontenituri għall-applikazzjonijiet kollha li kelli bżonn għall-ittestjar ġewwa kontenitur ieħor (ejja nsejħulha kontenitur għall-istadji). L-idea kienet li jinbeda staging container bil-bandiera -rm, li awtomatikament tħassar il-kontenitur kollu u l-kontenut kollu tiegħu meta jitwaqqaf. Ħajt l-immaġni Docker minn Docker innifsu (https://hub.docker.com/_/docker), iżda rriżulta li kien ingombranti wisq u qatt ma rnexxieli nġibha taħdem kif kelli bżonn u ridt immur it-triq kollha jien.

Prattika. Koni

Bdejt biex il-kontenitur jaħdem kif kelli bżonn u komplejt l-esperimenti tiegħi, li rriżultaw f'numru kbir ta 'blanzuni. Ir-riżultat tal-awtotortura tiegħi kien l-algoritmu li ġej:

  1. Inniedu l-kontenitur Docker fil-mod interattiv.

    docker run --privileged -it docker:18.09.6

    Oqgħod attent għall-verżjoni tal-kontenitur, pass lejn il-lemin jew ix-xellug u d-DinD tiegħek jinbidel f'qargħa ħamra. Fil-fatt, l-affarijiet jinkisru spiss meta toħroġ verżjoni ġdida.
    Irridu nidħlu immedjatament fil-qoxra.

  2. Qed nippruvaw insiru nafu liema kontenituri qed jaħdmu (Tweġiba: xejn), imma ejja nħaddmu l-kmand xorta waħda:

    docker ps

    Int tkun xi ftit sorpriż, iżda jirriżulta li d-daemon Docker lanqas biss qed jaħdem:

    error during connect: Get http://docker:2375/v1.40/containers/json: dial tcp: lookup docker on 
    192.168.65.1:53: no such host

  3. Ejja nħaddmuha aħna:

    dockerd &

    Sorpriża oħra spjaċevoli:

    failed to start daemon: Error initializing network controller: error obtaining controller instance: failed 
    to create NAT chain DOCKER: Iptables not found

  4. Installa l-iptables u l-pakketti bash (kollox huwa aktar pjaċevoli biex taħdem f'bash milli f'sh):

    apk add --no-cache iptables bash

  5. Ejja nniedu bash. Fl-aħħar erġajna fil-qoxra tas-soltu

  6. Ejja nippruvaw nibdew Docker mill-ġdid:

    dockerd &

    Għandna naraw folja twila ta 'zkuk li tispiċċa bi:

    INFO[2019-11-25T19:51:19.448080400Z] Daemon has completed initialization          
    INFO[2019-11-25T19:51:19.474439300Z] API listen on /var/run/docker.sock

  7. Agħfas Enter. Aħna lura fil-bash.

Minn issa 'l quddiem, nistgħu nippruvaw inniedu kontenituri oħra ġewwa l-kontenitur Docker tagħna, imma x'jiġri jekk irridu nniedu kontenitur Docker ieħor ġewwa l-kontenitur Docker tagħna jew xi ħaġa tmur ħażin u l-kontenitur jiġġarraf? Ibda mill-ġdid.

Kontenitur DinD stess u esperimenti ġodda

Kif għamilt Docker ġewwa Docker u x'ħarġu minnu
Biex nevita li nirrepeti l-passi ta 'hawn fuq għal darb'oħra, ħloqt il-kontenitur DinD tiegħi stess:

https://github.com/alekslitvinenk/dind

Is-soluzzjoni DinD li taħdem tatni l-abbiltà li nħaddem Docker ġewwa Docker b'mod rikorsiv u nagħmel esperimenti aktar avventurużi.
Jien ser niddeskrivi esperiment wieħed bħal dan (suċċess) bit-tħaddim ta' MySQL u Nodejs issa.
L-aktar bla paċenzja jista’ jara kif kien hawn

Allura, nibdew:

  1. Inniedu DinD fil-mod interattiv. F'din il-verżjoni ta 'DinD, irridu nimmappjaw manwalment il-portijiet kollha li l-kontenituri tat-tfal tagħna jistgħu jużaw (diġà qed naħdem fuq dan)

    docker run --privileged -it 
    -p 80:8080 
    -p 3306:3306 
    alekslitvinenk/dind

    Nidħlu fil-bash, minn fejn nistgħu immedjatament nibdew inniedu kontenituri tat-tfal.

  2. Tnedija MySQL:

    docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql

  3. Aħna nikkonnettjaw mad-database bl-istess mod kif konna nqabbdu magħha lokalment. Ejja niżguraw li kollox jaħdem.

  4. Niedi t-tieni kontenitur:

    docker run -d --rm -p 8080:8080 alekslitvinenk/hello-world-nodejs-server

    Jekk jogħġbok innota li l-immappjar tal-port se jkun eżatt 8080:8080, peress li diġà mmappajna l-port 80 mill-host għall-kontenitur prinċipali għall-port 8080.

  5. Immorru għal localhost fil-browser, kun żgur li s-server jirrispondi "Hello World!"

Fil-każ tiegħi, l-esperiment b'kontenituri Docker ibdew irriżulta li kien pjuttost pożittiv u se nkompli niżviluppa l-proġett u nużah għall-istadji. Jidhirli li din hija soluzzjoni ħafna aktar ħafifa minn Kubernetes u Jenkins X. Iżda din hija l-opinjoni suġġettiva tiegħi.

Naħseb li dak kollu għall-artiklu tal-lum. Fl-artiklu li jmiss ser niddeskrivi f'aktar dettall esperimenti bit-tħaddim ta 'Docker b'mod rikorsiv f'Docker u l-immuntar ta' direttorji fil-fond f'kontenituri nested.

PS Jekk issib dan il-proġett utli, jekk jogħġbok agħtih stilla fuq GitHub, għidlu u għid lil sħabek.

Edit1 Żbalji kkoreġuti, iffokat fuq 2 videos

Sors: www.habr.com

Żid kumment