VM vai Docker?

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

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster