Hi kollha! Fil tiegħu
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 (
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:
-
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. -
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
-
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
-
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
-
Ejja nniedu bash. Fl-aħħar erġajna fil-qoxra tas-soltu
-
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
-
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
Biex nevita li nirrepeti l-passi ta 'hawn fuq għal darb'oħra, ħloqt il-kontenitur DinD tiegħi stess:
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:
-
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.
-
Tnedija MySQL:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql
-
Aħna nikkonnettjaw mad-database bl-istess mod kif konna nqabbdu magħha lokalment. Ejja niżguraw li kollox jaħdem.
-
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.
-
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