VM vai Docker?

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

Pievieno komentāru