KÄ saprast, ka jums ir nepiecieÅ”ams Docker, nevis VM? Jums ir jÄnosaka, ko tieÅ”i vÄlaties izolÄt. Ja vÄlaties izolÄt sistÄmu ar garantÄtiem resursiem un virtuÄlo aparatÅ«ru, tad izvÄlei vajadzÄtu bÅ«t VM. Ja jums ir nepiecieÅ”ams izolÄt darbojoÅ”Äs lietojumprogrammas kÄ atseviŔķus sistÄmas procesus, jums bÅ«s nepiecieÅ”ams Docker.
KÄda ir atŔķirÄ«ba starp Docker konteineriem un virtuÄlajÄm maŔīnÄm?
VirtuÄlÄ maŔīna (VM) ir virtuÄls dators ar visÄm virtuÄlajÄm ierÄ«cÄm un virtuÄlo cieto disku, kurÄ ir instalÄta jauna neatkarÄ«ga OS kopÄ ar virtuÄlo ierÄ«Äu draiveriem, atmiÅas pÄrvaldÄ«bu un citiem komponentiem. Tas ir, mÄs iegÅ«stam fiziskÄs aparatÅ«ras abstrakciju, kas ļauj darbinÄt daudzus virtuÄlos datorus vienÄ datorÄ.
InstalÄta virtuÄlÄ maŔīna var aizÅemt vietu diskÄ dažÄdos veidos:
- fiksÄta vieta cietajÄ diskÄ, kas ļauj ÄtrÄk piekļūt virtuÄlajam cietajam diskam un izvairÄ«ties no failu sadrumstalotÄ«bas;
- dinamiska atmiÅas pieŔķirÅ”ana. InstalÄjot papildu lietojumprogrammas, atmiÅa tÄm tiks dinamiski pieŔķirta, lÄ«dz tÄ sasniegs maksimÄlo tai atvÄlÄto apjomu.
Jo vairÄk virtuÄlo maŔīnu serverÄ«, jo vairÄk vietas tÄs aizÅem, kÄ arÄ« ir nepiecieÅ”ams pastÄvÄ«gs vides atbalsts, kas nepiecieÅ”ams, lai jÅ«su lietojumprogramma darbotos.
dokers ir programmatÅ«ra lietojumprogrammu veidoÅ”anai, pamatojoties uz konteineriem. Konteineriem un virtuÄlajÄm maŔīnÄm ir lÄ«dzÄ«gas priekÅ”rocÄ«bas, taÄu tÄs darbojas atŔķirÄ«gi. Konteineri aizÅem mazÄk vietas, jo pÄrmÄrÄ«gi izmanto vairÄk resursdatora sistÄmas koplietojamo resursu nekÄ virtuÄlÄ maŔīna, jo atŔķirÄ«bÄ no VM nodroÅ”ina virtualizÄciju OS lÄ«menÄ«, nevis aparatÅ«ru. Å Ä« pieeja nodroÅ”ina mazÄku atmiÅas apjomu, ÄtrÄku izvietoÅ”anu un vieglÄku mÄrogoÅ”anu.
Konteiners nodroÅ”ina efektÄ«vÄku mehÄnismu lietojumprogrammu iekapsulÄÅ”anai, nodroÅ”inot nepiecieÅ”amÄs saskarnes resursdatora sistÄmai. Å Ä« funkcija ļauj konteineriem koplietot sistÄmas kodolu, kur katrs no konteineriem darbojas kÄ atseviŔķs galvenÄs OS process, kuram ir savs atmiÅas apgabalu kopums (sava āāvirtuÄlÄ adreÅ”u telpa). TÄ kÄ katra konteinera virtuÄlÄ adreÅ”u telpa ir sava, datus, kas pieder dažÄdiem atmiÅas apgabaliem, nevar mainÄ«t.
VietÄjÄ Docker operÄtÄjsistÄma ir Linux (Docker var izmantot arÄ« operÄtÄjsistÄmÄs Windows un MacOS), tÄ izmanto savas galvenÄs priekÅ”rocÄ«bas, kas ļauj organizÄt sadalÄ«tu kodolu. Docker konteineru palaiÅ”ana operÄtÄjsistÄmÄ Windows notiks Linux virtuÄlajÄ maŔīnÄ. konteineri koplieto resursdatora sistÄmas OS, un galvenÄ OS tiem ir Linux.
Konteiners ā kÄ tas darbojas?
Konteiners ir abstrakcija lietojumprogrammas lÄ«menÄ«, kas apvieno kodu un atkarÄ«bas. Konteineri vienmÄr tiek veidoti no attÄliem, pievienojot rakstÄmu augÅ”Äjo slÄni un inicializÄjot dažÄdus parametrus. TÄ kÄ konteineram ir savs rakstÄ«Å”anas slÄnis un visas izmaiÅas tiek glabÄtas Å”ajÄ slÄnÄ«, vairÄki konteineri var koplietot piekļuvi vienam un tam paÅ”am galvenajam attÄlam.
Katru konteineru var konfigurÄt, izmantojot failu docker-compose projektÄ, kas iekļauts galvenajÄ risinÄjumÄ docker-compose.yml. Tur var iestatÄ«t dažÄdus parametrus, piemÄram, konteinera nosaukumu, portus, identifikatorus, resursu ierobežojumus, atkarÄ«bas starp citiem konteineriem. Ja iestatÄ«jumos nenorÄdÄ«siet konteinera nosaukumu, Docker katru reizi izveidos jaunu konteineru, nejauÅ”i pieŔķirot tam nosaukumu.
Kad konteiners tiek palaists no attÄla, Docker pievieno lasÄ«Å”anas/rakstÄ«Å”anas failu sistÄmu virs visiem zemÄk esoÅ”ajiem slÄÅiem. Å eit darbosies visi procesi, kurus vÄlamies, lai mÅ«su Docker konteiners darbotos.
Kad Docker pirmo reizi palaiž konteineru, sÄkotnÄjais lasÄ«Å”anas/rakstÄ«Å”anas slÄnis ir tukÅ”s. Kad notiek izmaiÅas, tÄs tiek piemÄrotas Å”im slÄnim; piemÄram, ja vÄlaties modificÄt failu, Å”is fails tiks kopÄts no tÄlÄk esoÅ”Ä tikai lasÄmÄ slÄÅa uz lasÄ«Å”anas un rakstÄ«Å”anas slÄni.
Faila tikai lasÄmÄ versija joprojÄm pastÄvÄs, taÄu tagad tÄ ir paslÄpta zem kopijas. Apjomi tiek izmantoti datu glabÄÅ”anai neatkarÄ«gi no konteinera dzÄ«ves cikla. SÄjumi tiek inicializÄti, kad tiek izveidots konteiners.
KÄ attÄls ir saistÄ«ts ar konteineru?
AttÄls - katra konteinera galvenais elements. AttÄls tiek izveidots no projektam pievienotÄ Docker faila, un tas ir failu sistÄmu (slÄÅu) kopums, kas slÄÅots viens virs otra un sagrupÄts kopÄ, pieejams tikai lasÄ«Å”anai; maksimÄlais slÄÅu skaits ir 127.
Katra attÄla centrÄ ir bÄzes attÄls, ko norÄda komanda FROM ā ievades punkts, Ä£enerÄjot Dockerfile attÄlu. Katrs slÄnis ir tikai lasÄms slÄnis, un to attÄlo viena komanda, kas modificÄ failu sistÄmu, kas ierakstÄ«ta Dockerfile.
Lai apvienotu Å”os slÄÅus vienÄ attÄlÄ, Docker izmanto uzlaboto daudzslÄÅu SavienÄ«bas failu sistÄmu (AuFS ir veidota uz UnionFS), ļaujot dažÄdiem failiem un direktorijiem no dažÄdiem failu slÄÅiem pÄrredzami pÄrklÄties, radot saistÄ«tu failu sistÄmu.
SlÄÅi satur metadatus, kas ļauj saglabÄt saistÄ«tu informÄciju par katru slÄni izpildlaikÄ un izveides laikÄ. Katrs slÄnis satur saiti uz nÄkamo slÄni, ja slÄnim nav saites, tad Å”is ir attÄla augÅ”Äjais slÄnis.
Dockerfile var saturÄt tÄdas komandas kÄ:
- NO - ieejas punkts attÄla veidoÅ”anÄ;
- UZTURÄTÄJS - attÄla Ä«paÅ”nieka vÄrds un uzvÄrds;
- RUN - komandas izpilde attÄla montÄžas laikÄ;
- ADD - resursdatora faila kopÄÅ”ana uz jaunu attÄlu, ja norÄdÄt URL failu, Docker to lejupielÄdÄs norÄdÄ«tajÄ direktorijÄ;
- ENV - vides mainīgie;
- CMD - sÄk jauna konteinera izveidi, pamatojoties uz attÄlu;
- ENTRYPOINT ā komanda tiek izpildÄ«ta, palaižot konteineru.
- WORKDIR ir darba direktorijs CMD komandas izpildei.
- LIETOTÄJS ā iestata UID konteineram, kas izveidots no attÄla.
- VOLUME ā pievieno resursdatora direktoriju konteineram.
- EXPOSE ir portu kopa, kas tiek noklausÄ«ta konteinerÄ.
KÄ darbojas UnionFS?
UnionFS ā pakalpojumu steku failu sistÄma (FS) Linux un FreeBSD. Å Ä« FS Ä«steno kopÄÅ”anas-rakstÄ«Å”anas (Copy-On-Write, COW) mehÄnismu. UnionFS darba vienÄ«ba ir slÄnis, katrs slÄnis ir jÄuzskata par atseviŔķu pilnvÄrtÄ«gu failu sistÄmu ar direktoriju hierarhiju no paÅ”as saknes. UnionFS izveido savienojuma stiprinÄjumu citÄm failu sistÄmÄm un ļauj pÄrredzami sapludinÄt failus un direktorijus no dažÄdÄm failu sistÄmÄm (ko sauc par filiÄlÄm) vienÄ saistÄ«tÄ failu sistÄmÄ, kas ir lietotÄjam pÄrredzama.
Katalogu ar vienÄdiem ceļiem saturs tiks parÄdÄ«ts kopÄ vienÄ apvienotajÄ direktorijÄ (vienÄ nosaukumvietÄ) iegÅ«tajÄ failu sistÄmÄ.
UnionFS apvieno slÄÅus, pamatojoties uz Å”Ädiem principiem:
- viens no slÄÅiem kļūst par augstÄkÄ lÄ«meÅa slÄni, otrais un nÄkamie slÄÅi kļūst par zemÄka lÄ«meÅa slÄÅiem;
- slÄÅu objekti lietotÄjam ir pieejami āno augÅ”as uz lejuā, t.i. ja pieprasÄ«tais objekts atrodas "augÅ”ÄjÄ" slÄnÄ«, tas tiek atgriezts neatkarÄ«gi no objekta ar tÄdu paÅ”u nosaukumu klÄtbÅ«tnes "apakÅ”ÄjÄ" slÄnÄ«; pretÄjÄ gadÄ«jumÄ tiek atgriezts "apakÅ”ÄjÄ" slÄÅa objekts; ja pieprasÄ«tÄ objekta nav ne tur, ne tur, tiek atgriezta kļūda "Nav Å”Äda faila vai direktorija";
- darba slÄnis ir āaugÅ”Äjaisā, tas ir, visas lietotÄja darbÄ«bas datu mainÄ«Å”anai tiek atspoguļotas tikai augÅ”ÄjÄ lÄ«meÅa slÄnÄ«, neietekmÄjot zemÄkÄ lÄ«meÅa slÄÅu saturu.
Docker ir visizplatÄ«tÄkÄ tehnoloÄ£ija konteineru izmantoÅ”anai lietojumprogrammu darbÄ. Tas ir kļuvis par standartu Å”ajÄ jomÄ, balstoties uz Linux kodola nodroÅ”inÄtajÄm cgrupÄm un nosaukumu telpÄm.
Docker ļauj mums Ätri izvietot lietojumprogrammas un vislabÄk izmantot failu sistÄmu, kopÄ«gojot OS kodolu starp visiem konteineriem, kas darbojas kÄ atseviŔķi OS procesi.
Avots: www.habr.com