Sveiki visiem! ViÅa
sÄkums
Viss sÄkÄs lietainÄ septembra vakarÄ, kad Digital Ocean tÄ«rÄ«ju maŔīnu, ko par 5 dolÄriem noÄ«rÄju, kas bija iesaldÄta tÄdÄļ, ka Docker bija aizpildÄ«jis visus 24 gigabaitus pieejamÄs diska vietas ar saviem attÄliem un konteineriem. Ironija bija tÄda, ka visi Å”ie attÄli un konteineri bija Ä«slaicÄ«gi un bija nepiecieÅ”ami tikai, lai pÄrbaudÄ«tu manas lietojumprogrammas veiktspÄju katru reizi, kad tika izlaista jauna bibliotÄkas vai ietvara versija. Es mÄÄ£inÄju rakstÄ«t Äaulas skriptus un iestatÄ«t cron grafiku, lai iztÄ«rÄ«tu atkritumus, taÄu tas nepalÄ«dzÄja: katru reizi tas neizbÄgami beidzÄs ar mana servera diska vietas apÄÅ”anu un servera karÄÅ”anos (labÄkajÄ gadÄ«jumÄ). KÄdÄ brÄ«dÄ« es saskÄros ar rakstu par to, kÄ palaist Jenkins konteinerÄ un kÄ tas var izveidot un dzÄst bÅ«vniecÄ«bas cauruļvadus, izmantojot tajÄ pÄrsÅ«tÄ«to docker dÄmona ligzdu. Man patika Ŕī ideja, taÄu es nolÄmu iet tÄlÄk un mÄÄ£inÄt eksperimentÄt ar Docker tieÅ”u palaiÅ”anu iekÅ”Ä Docker. TobrÄ«d man Ŕķita pilnÄ«gi loÄ£isks risinÄjums cita konteinera (sauksim to par inscenÄÅ”anas konteineru) iekÅ”ienÄ lejupielÄdÄt Docker attÄlus un izveidot konteinerus visÄm testÄÅ”anai nepiecieÅ”amajÄm aplikÄcijÄm. Ideja bija sÄkt inscenÄÅ”anas konteineru ar karogu -rm, kas automÄtiski izdzÄÅ” visu konteineru un visu tÄ saturu, kad tas tiek apturÄts. Es izdomÄju Docker attÄlu no paÅ”a Docker (
Prakse. Konusi
Es nolÄmu, lai konteiners darbotos tÄ, kÄ man vajadzÄja, un turpinÄju savus eksperimentus, kuru rezultÄtÄ radÄs neskaitÄmi pumpuri. Manas paÅ”spÄ«dzinÄÅ”anas rezultÄts bija Å”Äds algoritms:
-
MÄs palaižam Docker konteineru interaktÄ«vajÄ režīmÄ.
docker run --privileged -it docker:18.09.6
PievÄrsiet uzmanÄ«bu konteinera versijai, pagriezieties pa labi vai pa kreisi, un jÅ«su DinD pÄrvÄrÅ”as par Ä·irbi. Faktiski lietas diezgan bieži sabojÄjas, kad tiek izlaista jauna versija.
Mums nekavÄjoties jÄiekļūst ÄaulÄ. -
MÄs cenÅ”amies noskaidrot, kuri konteineri darbojas (atbilde: nav), taÄu izpildÄ«sim komandu tik un tÄ:
docker ps
JÅ«s bÅ«siet nedaudz pÄrsteigts, bet izrÄdÄs, ka Docker dÄmons pat nedarbojas:
error during connect: Get http://docker:2375/v1.40/containers/json: dial tcp: lookup docker on 192.168.65.1:53: no such host
-
Izpildīsim paŔi:
dockerd &
VÄl viens nepatÄ«kams pÄrsteigums:
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: Iptables not found
-
InstalÄjiet iptables un bash pakotnes (bash ir patÄ«kamÄk strÄdÄt nekÄ sh):
apk add --no-cache iptables bash
-
PalaidÄ«sim bash. Beidzot esam atgriezuÅ”ies ierastajÄ ÄaulÄ
-
MÄÄ£inÄsim vÄlreiz palaist Docker:
dockerd &
Mums vajadzÄtu redzÄt garu žurnÄlu lapu, kas beidzas ar:
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
-
Nospiediet Enter. MÄs esam atgriezuÅ”ies spÄrnos.
No Ŕī brīža mÄs varam mÄÄ£inÄt palaist citus konteinerus mÅ«su Docker konteinerÄ, bet ko darÄ«t, ja mÄs vÄlamies palaist citu Docker konteineru mÅ«su Docker konteinerÄ vai kaut kas noiet greizi un konteiners avarÄ? SÄciet visu no jauna.
Savs DinD konteiners un jauni eksperimenti
Lai izvairÄ«tos no iepriekÅ” minÄto darbÄ«bu atkÄrtoÅ”anas atkal un atkal, es izveidoju savu DinD konteineru:
DarbojoÅ”ais DinD risinÄjums man deva iespÄju rekursÄ«vi palaist Docker iekÅ”Ä Docker un veikt piedzÄ«vojumiem bagÄtÄkus eksperimentus.
Es tagad aprakstÄ«Å”u vienu Å”Ädu (veiksmÄ«gu) eksperimentu ar MySQL un Nodejs darbinÄÅ”anu.
NepacietÄ«gÄkie var redzÄt, kÄ Å”eit bija
TÄtad, sÄksim:
-
MÄs palaižam DinD interaktÄ«vajÄ režīmÄ. Å ajÄ DinD versijÄ mums ir manuÄli jÄkartÄ visi porti, kurus var izmantot mÅ«su bÄrnu konteineri (es jau strÄdÄju pie Ŕī)
docker run --privileged -it -p 80:8080 -p 3306:3306 alekslitvinenk/dind
Nokļūstam bashÄ, no kurienes uzreiz varam sÄkt palaist bÄrnu konteinerus.
-
Palaidiet MySQL:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql
-
MÄs izveidojam savienojumu ar datu bÄzi tÄdÄ paÅ”Ä veidÄ, kÄ mÄs pieslÄgtos tai lokÄli. PÄrliecinÄsimies, ka viss darbojas.
-
Palaidiet otro konteineru:
docker run -d --rm -p 8080:8080 alekslitvinenk/hello-world-nodejs-server
LÅ«dzu, Åemiet vÄrÄ, ka ostas kartÄjums bÅ«s precÄ«zs 8080:8080, jo mÄs jau esam kartÄjuÅ”i 80. portu no resursdatora uz vecÄku konteineru ar portu 8080.
-
PÄrlÅ«kprogrammÄ mÄs ejam uz vietni localhost, pÄrliecinieties, vai serveris atbild: "Sveika pasaule!"
ManÄ gadÄ«jumÄ eksperiments ar ligzdotajiem Docker konteineriem izrÄdÄ«jÄs diezgan pozitÄ«vs un es turpinÄÅ”u izstrÄdÄt projektu un izmantot to inscenÄÅ”anai. Man Ŕķiet, ka Å”is ir daudz vieglÄks risinÄjums nekÄ Kubernetes un Jenkins X. Bet tas ir mans subjektÄ«vais viedoklis.
Es domÄju, ka tas ir viss Å”odienas rakstam. NÄkamajÄ rakstÄ es sÄ«kÄk aprakstÄ«Å”u eksperimentus ar Docker rekursÄ«vu palaiÅ”anu programmÄ Docker un direktoriju montÄžu dziļi ligzdotos konteineros.
PS Ja Å”is projekts jums Ŕķiet noderÄ«gs, lÅ«dzu, pieŔķiriet tam zvaigznÄ«ti vietnÄ GitHub, dakÅ”a un pastÄstiet draugiem.
RediÄ£Ät1 Izlabotas kļūdas, koncentrÄjoties uz 2 videoklipiem
Avots: www.habr.com