Vai Docker ir rotaļlieta vai nÄ? Vai arÄ« tÄ joprojÄm ir taisnÄ«ba?
Sveiki visiem!
Ä»oti gribu Ä·erties pie tÄmas, bet pareizÄk bÅ«tu mazliet pastÄstÄ«t par savu stÄstu:
Ieraksts
Esmu programmÄtÄjs ar pieredzi frontend vienas lapas aplikÄciju, scala/java un nodejs izstrÄdÄ uz servera.
Diezgan ilgu laiku (pÄris vai trÄ«s gadus noteikti) biju uzskats, ka Docker ir debesu manna un vispÄr ļoti forÅ”s rÄ«ks un pilnÄ«gi katram izstrÄdÄtÄjam bÅ«tu jÄprot to izmantot. No tÄ izriet, ka katram izstrÄdÄtÄjam ir jÄbÅ«t instalÄtam Docker savÄ vietÄjÄ datorÄ. Kas par manu viedokli, paskaties cauri vakances, kas ir izliktas tajÄ paÅ”Ä hh. KatrÄ otrajÄ ir pieminÄts dokers, un, ja tas jums pieder, tÄ bÅ«s jÅ«su konkurences priekÅ”rocÄ«ba š
Pa ceļam es satiku daudzus cilvÄkus ar atŔķirÄ«go attieksmi pret Docker un tÄs ekosistÄmu. Daži teica, ka Ŕī ir Ärta lieta, kas garantÄ starpplatformu funkcionalitÄti. Otrie nesaprata, kÄpÄc jÄskrien konteineros un kÄda peļÅa no tÄ bÅ«s, treÅ”ajiem bija pilnÄ«gi vienalga un netraucÄja (vienkÄrÅ”i uzrakstÄ«ja kodu un devÄs mÄjÄs - apskaužu viÅus, pa veids :)
LietoŔanas iemesli
KÄpÄc es izmantoju docker? IespÄjams, Å”Ädu iemeslu dÄļ:
datu bÄzes palaiÅ”ana, 99% lietojumprogrammu tÄs izmanto
nginx palaiÅ”ana priekÅ”gala izplatÄ«Å”anai un starpniekservera izmantoÅ”ana aizmugursistÄmai
jÅ«s varat iepakot lietojumprogrammu docker attÄlÄ, tÄdÄ veidÄ mana lietojumprogramma darbosies visur, kur pastÄv docker, izplatÄ«Å”anas problÄma tiek atrisinÄta nekavÄjoties
pakalpojumu atklÄÅ”ana no kastes, jÅ«s varat izveidot mikropakalpojumus, katrs konteiners (pieslÄgts kopÄjam tÄ«klam) var viegli sasniegt citu, izmantojot aizstÄjvÄrdu, ļoti Ärti
Ir jautri izveidot konteineru un "spÄlÄties" tajÄ.
Kas man vienmÄr NEPATÄŖK Docker:
Lai mana lietojumprogramma darbotos, man serverÄ« ir nepiecieÅ”ams pats Docker. KÄpÄc man tas ir vajadzÄ«gs, ja manas lietojumprogrammas darbojas uz jre vai nodejs un tÄm paredzÄta vide jau ir serverÄ«?
ja gribu palaist savu (privÄto) lokÄli uzbÅ«vÄto attÄlu uz attÄlÄ servera, tad vajag savu docker repozitoriju, vajag, lai kaut kur strÄdÄ reÄ£istrs un arÄ« jÄkonfigurÄ https, jo docker cli strÄdÄ tikai pÄr https. Ak, sasodÄ«ts... protams, ir iespÄjas saglabÄt attÄlu lokÄli caur docker save un vienkÄrÅ”i nosÅ«tiet attÄlu caur scp... Bet tas ir daudz Ä·ermeÅa kustÄ«bu. Un turklÄt tas izskatÄs kÄ ākruÄ·uā risinÄjums, lÄ«dz parÄdÄs jÅ«su paÅ”u krÄtuve
docker-compose. Tas ir nepiecieÅ”ams tikai konteineru darbinÄÅ”anai. Tas ir viss. ViÅÅ” neko citu nevar. Docker-compose ir virkne failu versiju, sava sintakse. Lai cik tas bÅ«tu deklaratÄ«vs, es nevÄlos lasÄ«t viÅu dokumentÄciju. Man tas nekur citur nebÅ«s vajadzÄ«gs.
strÄdÄjot komandÄ, lielÄkÄ daļa cilvÄku raksta Dockerfile ļoti greizi, nesaprot, kÄ tas tiek saglabÄts keÅ”atmiÅÄ, pievieno attÄlam visu nepiecieÅ”amo un nevajadzÄ«go, manto no attÄliem, kas nav Dockerhub vai privÄtÄ repozitorijÄ, izveido dažus docker-compose faili ar datu bÄzÄm, un nekas nepaliek. TajÄ paÅ”Ä laikÄ izstrÄdÄtÄji ar lepnumu paziÅo, ka Docker ir forÅ”s, viÅiem viss darbojas lokÄli, un HR vakancei Ä«paÅ”i raksta: "MÄs izmantojam Docker, un mums ir nepiecieÅ”ams kandidÄts ar Å”Ädu darba pieredzi."
Mani nepÄrtraukti vajÄ domas par visu celÅ”anu Docker: postgresql, kafka, redis. ŽÄl, ka ne viss darbojas konteineros, ne visu ir viegli konfigurÄt un palaist. To atbalsta treÅ”o puÅ”u izstrÄdÄtÄji, nevis paÅ”i pÄrdevÄji. Un, starp citu, uzreiz rodas jautÄjums: pÄrdevÄji neuztraucas par savu produktu uzturÄÅ”anu Docker, kÄpÄc tas tÄ ir, varbÅ«t viÅi kaut ko zina?
VienmÄr rodas jautÄjums par konteinera datu noturÄ«bu. un tad jÅ«s domÄjat, vai man vienkÄrÅ”i jÄpievieno resursdatora direktorijs vai jÄizveido docker sÄjums vai jÄizveido datu konteiners, kas tagad ir deprecated? Ja es montÄju direktoriju, tad man ir jÄpÄrliecinÄs, vai konteinerÄ esoÅ”Ä lietotÄja uid un gid atbilst konteinera palaiÅ”anas lietotÄja id, pretÄjÄ gadÄ«jumÄ konteinera izveidotie faili tiks izveidoti ar root tiesÄ«bÄm. Ja es lietoju volume tad daži vienkÄrÅ”i tiks izveidoti /usr/* un ar uid un gid bÅ«s tas pats stÄsts kÄ pirmajÄ gadÄ«jumÄ. Ja palaižat treÅ”Äs puses komponentu, jums ir jÄizlasa dokumentÄcija un jÄmeklÄ atbilde uz jautÄjumu: "kuros konteinera direktorijos komponents ieraksta failus?"
Man vienmÄr nav paticis, ka man bija pÄrÄk ilgi jÄmÄcÄs ar Docker sÄkotnÄjÄ stadijÄ: Es izdomÄju, kÄ palaist konteinerus, no kÄdiem attÄliem palaist, izveidoju Makefiles, kas saturÄja garÄs Docker komandas aizstÄjvÄrdus. Es ienÄ«du doku komponÄÅ”anu, jo nevÄlÄjos apgÅ«t citu doku ekosistÄmas rÄ«ku. UN docker-compose up Mani tas traucÄja, it Ä«paÅ”i, ja viÅi tur joprojÄm satikÄs build konstrukcijas, nevis jau samontÄti attÄli. Viss, ko es patieÅ”Äm vÄlÄjos, bija vienkÄrÅ”i izveidot produktu efektÄ«vi un Ätri. Bet es nevarÄju saprast, kÄ izmantot docker.
IepazÄ«stinÄm ar Ansible
Nesen (pirms trÄ«s mÄneÅ”iem) es strÄdÄju ar DevOps komandu, kuras gandrÄ«z katram dalÄ«bniekam bija negatÄ«va attieksme pret Docker. Iemeslu dÄļ:
docker noteikumi iptables (lai gan to var atspÄjot daemon.json)
docker ir kļūdains, un mÄs to nedarbosim ražoÅ”anÄ
ja docker dÄmons avarÄ, tad attiecÄ«gi avarÄ visi konteineri ar infrastruktÅ«ru
nav nepiecieŔams dokeris
kÄpÄc docker, ja ir Ansible un virtuÄlÄs maŔīnas
TajÄ paÅ”Ä darbÄ es iepazinos ar citu rÄ«ku - Ansible. Reiz par to dzirdÄju, bet nemÄÄ£inÄju rakstÄ«t pats savas rokasgrÄmatas. Un tagad es sÄku rakstÄ«t savus uzdevumus un tad mans redzÄjums pilnÄ«bÄ mainÄ«jÄs! Jo sapratu: Ansible ir moduļi, lai darbinÄtu vienus un tos paÅ”us docker konteinerus, attÄlu bÅ«vÄjumus, tÄ«klus utt., un konteinerus var palaist ne tikai lokÄli, bet arÄ« attÄlos serveros! Manam priekam nebija robežu ā es atradu NORMÄLU rÄ«ku un izmetu savus Makefile un docker-compose failus, tie tika aizstÄti ar yaml uzdevumiem. Kods tika samazinÄts, izmantojot tÄdas konstrukcijas kÄ loop, when, Uc
Docker treÅ”o puÅ”u komponentu, piemÄram, datu bÄzu, darbinÄÅ”anai
Nesen iepazinos ar ssh tuneļiem. IzrÄdÄ«jÄs, ka attÄlÄ servera portu ir ļoti viegli āpÄrsÅ«tÄ«tā uz vietÄjo portu. AttÄlais serveris var bÅ«t vai nu maŔīna mÄkonÄ«, vai virtuÄla maŔīna, kas darbojas programmÄ VirtualBox. Ja manam kolÄÄ£im vai man ir nepiecieÅ”ama datu bÄze (vai kÄds cits treÅ”Äs puses komponents), mÄs varam vienkÄrÅ”i startÄt serveri ar Å”o komponentu un izslÄgt to, kad serveris nav vajadzÄ«gs. Portu pÄradresÄcija nodroÅ”ina tÄdu paÅ”u efektu kÄ datu bÄze, kas darbojas docker konteinerÄ.
Å Ä« komanda pÄrsÅ«ta manu vietÄjo portu uz attÄlo serveri, kurÄ darbojas postgresql:
AttÄlÄ servera izmantoÅ”ana atrisina problÄmu ar komandas attÄ«stÄ«bu. Å Ädu serveri var izmantot vairÄki izstrÄdÄtÄji vienlaikus, viÅiem nav jÄspÄj konfigurÄt postgresql, saprast Docker un citas sarežģītÄ«bas. AttÄlÄ serverÄ« to paÅ”u datu bÄzi var instalÄt paÅ”Ä Docker, ja ir grÅ«ti instalÄt konkrÄtu versiju. Viss, kas izstrÄdÄtÄjiem ir nepiecieÅ”ams, ir nodroÅ”inÄt ssh piekļuvi!
Nesen lasÄ«ju, ka SSH tuneļi ir ierobežota parastÄ VPN funkcionalitÄte! Varat vienkÄrÅ”i instalÄt OpenVPN vai citas VPN implementÄcijas, iestatÄ«t infrastruktÅ«ru un nodot to izstrÄdÄtÄjiem lietoÅ”anai. Tas ir tik forÅ”i!
Par laimi, AWS, GoogleCloud un citi sniedz jums gadu bez maksas, tÄpÄc izmantojiet tos! Tie ir lÄti, ja tos izslÄdzat, kad tos neizmantojat. Es vienmÄr domÄju, kÄpÄc man ir vajadzÄ«gs attÄlais serveris, piemÄram, gcloud, Ŕķiet, ka es tos atradu.
KÄ vietÄjo virtuÄlo maŔīnu varat izmantot to paÅ”u Alpine, kas tiek aktÄ«vi izmantota docker konteineros. Nu, vai daži citi vieglie sadalÄ«jumi, lai padarÄ«tu maŔīnu ÄtrÄku palaiÅ”anu.
SecinÄjums: jÅ«s varat un vajadzÄtu palaist datu bÄzes un citus infrastruktÅ«ras labumus attÄlos serveros vai virtuÄlajÄ kastÄ. Å iem nolÅ«kiem man nav vajadzÄ«gs doks.
Nedaudz par doku attÄliem un izplatÄ«Å”anu
Es jau rakstÄ«ju raksts kurÄ es gribÄju pateikt, ka docker attÄlu izmantoÅ”ana nesniedz nekÄdu garantiju. Docker attÄli ir nepiecieÅ”ami tikai Docker konteinera izveidei. Ja veicat jauninÄÅ”anu uz Docker attÄlu, jÅ«s veicat jauninÄÅ”anu, lai izmantotu Docker konteinerus un izmantosit tikai tos.
Vai esat redzÄjuÅ”i kaut kur, kur programmatÅ«ras izstrÄdÄtÄji portÄ savus produktus tikai docker attÄlÄ?
LielÄkÄ daļa produktu ir binÄri faili noteiktai platformai; tie tiek vienkÄrÅ”i pievienoti docker attÄlam, kas tiek mantots no vÄlamÄs platformas. Vai esat kÄdreiz domÄjis, kÄpÄc vietnÄ dockerhub ir tik daudz lÄ«dzÄ«gu attÄlu? Ievadiet, piemÄram, nginx, jÅ«s redzÄsit 100500 XNUMX attÄlus no dažÄdiem cilvÄkiem. Å ie cilvÄki neizstrÄdÄja paÅ”u nginx, viÅi vienkÄrÅ”i pievienoja oficiÄlo nginx savam doka attÄlam un papildinÄja to ar savÄm konfigurÄcijÄm, lai bÅ«tu ÄrtÄk palaist konteinerus.
VispÄr var vienkÄrÅ”i glabÄt tgz, ja kÄdam vajag palaist dockerÄ, tad lai pievieno tgz Dockerfile, manto no vÄlamÄs vides un izveido papildus bulkas, kas nemaina paÅ”u aplikÄciju tgz. Ikviens, kurÅ” izveidos docker attÄlu, zinÄs, kas ir tgz un kas viÅam ir nepiecieÅ”ams, lai strÄdÄtu. Å Ädi es izmantoju docker Å”eit
ApakÅ”ÄjÄ lÄ«nija: man nav nepiecieÅ”ams docker reÄ£istrs, es izmantoÅ”u kaut kÄdu S3 vai vienkÄrÅ”i failu krÄtuvi, piemÄram, Google disku/dropbox
Dokeris CI
Visi uzÅÄmumi, kuros esmu strÄdÄjusi, ir lÄ«dzÄ«gi. TÄs parasti ir pÄrtikas preces. Tas ir, viÅiem ir viena lietojumprogramma, viena tehnoloÄ£iju kaudze (labi, varbÅ«t pÄris vai trÄ«s programmÄÅ”anas valodas).
Å ie uzÅÄmumi savos serveros, kur darbojas CI process, izmanto docker. JautÄjums: KÄpÄc jums ir jÄveido projekti savos serveros docker konteinerÄ? KÄpÄc gan vienkÄrÅ”i nesagatavot bÅ«vÄÅ”anai vidi, piemÄram, uzrakstÄ«t Ansible playbook, kas serverÄ«, kurÄ notiks bÅ«vÄÅ”ana, instalÄs nepiecieÅ”amÄs nodejs, php, jdk versijas, nokopÄs ssh atslÄgas utt.?
Tagad saprotu, ka tas ir Å”auÅ”ana sev kÄjÄ, jo dokeris ar savu izolÄciju nekÄdu peļÅu nenes. ProblÄmas, ar kurÄm es saskÄros ar CI Docker:
atkal jums ir nepiecieÅ”ams docker attÄls, lai izveidotu. jums ir jÄmeklÄ attÄls vai jÄuzraksta savs dockerfile.
90%, ka jums ir jÄpÄrsÅ«ta dažas ssh atslÄgas, slepenie dati, kurus nevÄlaties rakstÄ«t docker attÄlam.
konteiners tiek izveidots un nomirst, kopÄ ar to tiek zaudÄtas visas keÅ”atmiÅas. nÄkamajÄ bÅ«vniecÄ«bÄ tiks atkÄrtoti lejupielÄdÄtas visas projekta atkarÄ«bas, kas ir laikietilpÄ«gi un neefektÄ«vi, un laiks ir nauda.
IzstrÄdÄtÄji nebÅ«vÄ projektus dokeru konteineros (es kÄdreiz biju tÄds fans, tieÅ”Äm, agrÄk žÄl xD). Java ir iespÄjams izveidot vairÄkas versijas un nomainÄ«t tÄs ar vienu komandu uz vajadzÄ«go tagad. Nodejs ir tas pats, tur ir nvm.
secinÄjums
Es uzskatu, ka docker ir ļoti spÄcÄ«gs un elastÄ«gs rÄ«ks, tas ir tÄ trÅ«kums (izklausÄs dÄ«vaini, jÄ). Ar tÄs palÄ«dzÄ«bu uzÅÄmumi var viegli pieÄ·erties tam un izmantot to, kur nepiecieÅ”ams un nav vajadzÄ«gs. IzstrÄdÄtÄji palaiž savus konteinerus, dažas no savÄm vidÄm, pÄc tam tas viss vienmÄrÄ«gi nonÄk CI un ražoÅ”anÄ. DevOps komanda raksta sava veida kodu, lai palaistu Å”os konteinerus.
Izmantojiet docker tikai ieslÄgtu jaunÄkais posmÄ savÄ darbplÅ«smÄ, neievelciet to projektÄ sÄkumÄ. Tas neatrisinÄs jÅ«su biznesa problÄmas. ViÅÅ” tikai pÄrcels problÄmas CITÄ lÄ«menÄ« un piedÄvÄs savus risinÄjumus, tu darÄ«si dubultdarbu.
Kad ir nepiecieÅ”ams doks: Es nonÄcu pie secinÄjuma, ka docker ļoti labi spÄj optimizÄt doto procesu, bet ne izveidot pamata funkcionalitÄti
Ja joprojÄm nolemjat izmantot docker, tad:
esiet ÄrkÄrtÄ«gi uzmanÄ«gs
nepiespiediet izstrÄdÄtÄjus izmantot docker
lokalizÄjiet tÄ lietoÅ”anu vienuviet, neizplatiet to visÄs Dockefile un Docker-compose krÄtuvÄs
PS:
Nesen uzgÄju fasÄtÄjs un viÅi saka, ka tas ļoti labi darbojas ar Ansible un ļauj apvienot attÄlu veidoÅ”anas procesu (tostarp docker attÄlu)