KÄ saprast, ka jums nepiecieÅ”ams Docker, nevis VM? JÄnosaka, ko tieÅ”i vÄlaties izolÄt. Ja ir nepiecieÅ”ams izolÄt sistÄmu ar garantÄtiem piesaistÄ«tiem resursiem un virtuÄlo aparatÅ«ru, tad izvÄlei jÄbÅ«t par labu VM. Ja ir nepiecieÅ”ams izolÄt strÄdÄjoÅ”Äs lietotnes kÄ atseviŔķus sistÄmas procesus, jums bÅ«s nepiecieÅ”ams Docker.
Un kÄda ir atŔķirÄ«ba starp Docker konteineriem un VM?
VirtuÄlÄ maŔīna (VM) ā tÄ ir virtuÄla dators ar visÄm virtuÄlajÄm ierÄ«cÄm un virtuÄlo cieto disku, uz kura tiek uzstÄdÄ«ta jauna neatkarÄ«ga OS kopÄ ar virtuÄlajiem ierÄ«Äu draiveriem, atmiÅas pÄrvaldÄ«bu un citÄm komponentÄm. T. i., mÄs iegÅ«stam fiziskÄ aprÄ«kojuma abstrakciju, kas ļauj uz viena datora palaist vairÄkus virtuÄlus datorus.
UzstÄdÄ«tÄ VM var dažÄdi aizÅemt vietu datora diskÄ:
- fiksÄta vieta cietajÄ diskÄ, kas ļauj veikt ÄtrÄku piekļuvi virtuÄlajam cietajam diskam un izvairÄ«ties no failu fragmentÄcijas;
- dinamiskÄ atmiÅas pieŔķirÅ”ana. UzstÄdot papildu lietojumprogrammas, atmiÅa tiks dinamiskÄ veidÄ pieŔķirta tÄm, lÄ«dz tÄ sasniegs maksimÄlo apjomu, kas tai paredzÄts.
Jo vairÄk virtuÄlo maŔīnu uz servera, jo vairÄk vietas tÄs aizÅem un prasa pastÄvÄ«gu apkopes vidi, kurÄ nepiecieÅ”ams darboties jÅ«su lietotnei.
Docker ā tÄ ir programmatÅ«ra aplikÄciju izveidei, pamatojoties uz konteineriem. Konteineri un virtuÄlÄs maŔīnas ir lÄ«dzÄ«gi ieguvumi, bet darbojas atŔķirÄ«gi. Konteineri aizÅem mazÄk vietas, jo atkÄrtoti izmanto vairÄkus kopÄ«gus resursus saimniekrakstÄjÄ nekÄ VM, jo, atŔķirÄ«bÄ no VM, tÄ nodroÅ”ina virtuÄlizÄciju operÄtÄjsistÄmas lÄ«menÄ«, nevis aparatÅ«ras. Å Äda pieeja nodroÅ”ina mazÄku aizÅemto atmiÅas apjomu, Ätru izvietoÅ”anu un vieglÄku mÄrogojamÄ«bu.
Konteiners nodroÅ”ina efektÄ«vÄku lietojumprogrammu iepakojuma mehÄnismu, nodroÅ”inot nepiecieÅ”amos saskarnes viesdatoram. Å Ä« funkcionalitÄte ļauj konteineriem dalÄ«ties operÄtÄjsistÄmas kodÄ, kur katrs no konteineriem darbojas kÄ atseviŔķs galvenÄs OS process, kam ir sava atmiÅas jomu komplekts (sava virtuÄlÄ adreses telpa). TÄ kÄ katra konteinera virtuÄlÄ adreses telpa ir unikÄla, dati, kas pieder dažÄdÄm atmiÅas jomÄm, nevar tikt mainÄ«ti.
Docker pamatoperÄtÄjsistÄma ir Linux (Docker var izmantot arÄ« Windows un MacOS), un tas izmanto tÄs galvenÄs priekÅ”rocÄ«bas, kas ļauj organizÄt kodola dalīŔanu. Palaist Docker konteinerus Windows notiks virtuÄlÄ maŔīnÄ ar Linux OS, jo konteineri dalÄs ar viesdatora operÄtÄjsistÄmu, un galvenÄ operÄtÄjsistÄma tiem ir Linux.
Konteiners ā kÄ tas darbojas?
Konteiners ā ir abstrakcija lietojumprogrammas lÄ«menÄ«, kas apvieno kodu un atkarÄ«bas. Konteneri vienmÄr tiek izveidoti no attÄliem, pievienojot rakstÄmo augÅ”Äjo slÄni un inicializÄjot dažÄdus parametrus. TÄ kÄ konteiners ir ar savu rakstÄmo slÄni un visas izmaiÅas tiek saglabÄtas Å”ajÄ slÄnÄ«, vairÄki konteineri var kopÄ«gi izmantot piekļuvi vienam un tam paÅ”am pamata attÄlam.
Katru konteineru var konfigurÄt, izmantojot failu projektÄ docker-compose, kas iekļauts galvenajÄ risinÄjumÄ ā docker-compose.yml. Tur var norÄdÄ«t dažÄdus parametrus, piemÄram, konteineru nosaukumus, portus, identifikatorus, resursu ierobežojumus, atkarÄ«bas no citiem konteineriem. Ja konfigurÄcijÄ netiek norÄdÄ«ts konteineru nosaukums, Docker katru reizi izveidos jaunu konteineru, pieŔķirot tam nejauÅ”u nosaukumu.
Kad konteiners tiek palaists no attÄla, Docker pievieno failu sistÄmu lasīŔanai un rakstīŔanai virs visiem zemÄkajiem slÄÅiem. TieÅ”i Å”eit tiks izpildÄ«ti visi procesi, kurus mÄs vÄlamies, lai mÅ«su Docker konteiners veiktu.
Kad Docker pirmo reizi palaida konteiners, 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 mainÄ«t failu, Å”is fails tiks kopÄts no zemÄkÄ tikai lasīŔanas slÄÅa uz lasīŔanas un rakstīŔanas slÄni.
LasÄ«t tikai versija joprojÄm bÅ«s pieejama, taÄu tagad tÄ ir slÄpta zem kopijas. Datu glabÄÅ”anai, neatkarÄ«gi no konteineru dzÄ«ves cikla, tiek izmantoti tilti. Tilti tiek inicializÄti, izveidojot konteiners.
KÄ attÄls ir saistÄ«ts ar konteineru?
AttÄls ā galvenais elements katram konteineram. AttÄls tiek veidots no Dockerfile, kas pievienots projektam un attÄlo slÄÅu sistÄmu, kas uzlikta viena virs otras un apvienota kopÄ, pieejama tikai lasīŔanai; maksimÄlais slÄÅu skaits ir 127.
Katram attÄlam pamatÄ ir bÄzes attÄls, kas norÄdÄ«ts ar komandu FROM ā izejas punkts, veidojot Dockerfile attÄlu. Katrs slÄnis ir tikai lasÄmÄ slÄÅa un ir attÄlots ar vienu komandu, kas modificÄ failu sistÄmu, kurai ir uzrakstÄ«ts Dockerfile.
Lai apvienotu Å”os slÄÅus vienÄ attÄlÄ, Docker izmanto Advanced multi layered Union failu sistÄmu (AuFS balstÄs uz UnionFS), ļaujot dažÄdiem failiem un direktorijÄm no dažÄdiem failu slÄÅiem caurspÄ«dÄ«gi sakrist, radot saistÄ«tu failu sistÄmu.
SlÄÅi satur metadatus, kas ļauj saglabÄt saistÄ«to informÄciju par katru slÄni izpildes un izveides laikÄ. Katrs slÄnis satur atsauci uz nÄkamo slÄni, ja slÄnim nav atsauces, tad tas ir augÅ”Äjais slÄnis attÄlÄ.
Dockerfile var saturÄt Å”Ädas komandas:
- FROM ā izejas punkts attÄla veidoÅ”anai;
- MAINTAINER ā attÄla Ä«paÅ”nieka vÄrds;
- RUN ā komandas izpilde attÄla izveides laikÄ;
- ADD ā faila kopÄÅ”ana no mÄjas uz jauno attÄlu, ja tiek norÄdÄ«ts URL fails, 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, uzsÄkot konteiners.
- WORKDIR ā darba kataloga uzstÄdīŔana CMD komandas izpildei.
- USER ā nosaka UID izveidotajam konteineram no attÄla.
- VOLUME ā pievieno mÄjas direktoriju konteiners.
- EXPOSE ā kopums konteinerÄ klausÄmÄm portiem.
KÄ darbojas UnionFS?
UnionFS ā pakalpojumu steka failu sistÄma (FS) Linux un FreeBSD. Å Ä« FS Ä«steno kopÄÅ”anas mehÄnismu rakstīŔanas laikÄ (Copy-On-Write, COW). DarbÄ«bas vienÄ«ba UnionFS ir slÄnis, un katrs slÄnis ir jÄuzskata par atseviŔķu pilntiesÄ«gu failu sistÄmu ar direktoriju hierarhiju no paÅ”as saknes. UnionFS izveido apvienoto montÄžu citiem failu sistÄmÄm un ļauj, lietotÄjam nemanot, apvienot failus un katalogus no dažÄdÄm failu sistÄmÄm (sauktÄm par zariem) vienotÄ saistÄ«tÄ failu sistÄmÄ.
Katalogu saturs ar identiskÄm takÄm tiks attÄlots kopÄ vienÄ apvienotÄ katalogÄ (vienotÄ nosaukumu telpÄ) iegÅ«tajÄ failu sistÄmÄ.
UnionFS apvieno slÄÅus, ievÄrojot Å”Ädus principus:
- viens no slÄÅiem kļūst par augstÄko slÄni, otrais un turpmÄkie ā par zemÄkajiem slÄÅiem;
- lietotÄjam slÄÅu objekti pieejami "no augÅ”as uz leju", t.i., ja pieprasÄ«tais objekts ir "augÅ”ÄjÄ" slÄnÄ«, tiek atgriezts tas, neatkarÄ«gi no tÄ, vai Å”Äds objekts atrodas "apakÅ”ÄjÄ" slÄnÄ«; citÄdi tiek atgriezts "apakÅ”ÄjÄ" slÄÅa objekts; ja pieprasÄ«tÄ objekta nav ne tur, ne tur, tiek atgriezta kļūda "Nav tÄda faila vai katalogs";
- darba slÄnis ir "augÅ”Äjais", tas ir, visas lietotÄja veiktÄs darbÄ«bas datu maiÅÄ atspoguļojas tikai augstÄko slÄÅu lÄ«menÄ«, neietekmÄjot zemÄko slÄÅu saturu.
Docker ir visizplatÄ«tÄkÄ konteinervadmÄ tehnoloÄ£ija lietojumprogrammu darbÄ«bÄ. Tas ir kļuvis par standartu Å”ajÄ jomÄ, balstoties uz cgroups un nosaukumu telpÄm, ko nodroÅ”ina Linux kodols.
Docker ļauj mums Ätri izvÄrst lietojumprogrammas un maksimÄli optimÄli izmantot failu sistÄmu, sadalot OS kodolu starp visiem konteineriem, strÄdÄjot kÄ atseviŔķi OS procesi.
Avots: habr.com
