VM alebo Docker?

Ako zistíte, či potrebujete Docker a nie VM? Musíte si určiť, čo presne chcete izolovať. Ak chcete izolovať systém so zaručenými vyhradenými prostriedkami a virtuálnym hardvérom, potom by ste si mali zvoliť VM. Ak potrebujete izolovať spustené aplikácie ako samostatné systémové procesy, budete potrebovať Docker.

Aký je teda rozdiel medzi kontajnermi Docker a VM?

Virtuálny stroj (VM) je virtuálny počítač so všetkými virtuálnymi zariadeniami a virtuálnym pevným diskom, na ktorom je nainštalovaný nový nezávislý OS spolu s ovládačmi virtuálnych zariadení, správou pamäte a ďalšími komponentmi. To znamená, že získame abstrakciu fyzického hardvéru, ktorá nám umožňuje prevádzkovať veľa virtuálnych počítačov na jednom počítači.
Nainštalovaný VM môže zaberať miesto na disku počítača rôznymi spôsobmi:

  • pevné miesto na pevnom disku, ktoré umožňuje rýchlejší prístup k virtuálnemu pevnému disku a zabraňuje fragmentácii súborov;
  • dynamická alokácia pamäte. Pri inštalácii ďalších aplikácií sa im bude dynamicky prideľovať pamäť, kým nedosiahne maximálne množstvo, ktoré je im pridelené.

Čím viac virtuálnych strojov na server, tým viac miesta zaberajú a tiež vyžadujú neustálu podporu prostredia potrebného na spustenie vašej aplikácie.

prístavný robotník je softvér na vytváranie kontajnerových aplikácií. Kontajnery a virtuálne stroje majú podobné výhody, ale fungujú odlišne. Nádoby zaberajú menej miesta, pretože... opätovne použiť viac zdieľaných zdrojov hostiteľského systému ako VM, pretože na rozdiel od VM poskytuje virtualizáciu na úrovni OS, nie na úrovni hardvéru. Tento prístup má za následok nižšie nároky na pamäť, rýchlejšie nasadenie a jednoduchšie škálovanie.

Kontajner poskytuje efektívnejší mechanizmus na zapuzdrenie aplikácií tým, že poskytuje potrebné rozhrania hostiteľskému systému. Táto funkcia umožňuje kontajnerom zdieľať jadro systému, pričom každý kontajner beží ako samostatný proces hostiteľského OS, ktorý má vlastnú sadu pamäťových oblastí (svoj vlastný virtuálny adresný priestor). Keďže virtuálny adresný priestor každého kontajnera je jeho vlastný, údaje patriace do rôznych pamäťových oblastí nemožno zmeniť.
Natívny OS pre Docker je Linux (Docker je možné použiť aj na Windows a MacOS), využíva jeho hlavné výhody, ktoré mu umožňujú organizovať oddelenie jadra. Spustenie kontajnerov Docker v systéme Windows bude prebiehať vo virtuálnom stroji s operačným systémom Linux, pretože kontajnery zdieľajú OS hostiteľského systému a hlavným OS je pre ne Linux.

Kontajner - ako to funguje?

Kontajner je abstrakcia na úrovni aplikácie, ktorá kombinuje kód a závislosti. Kontajnery sú vždy vytvorené z obrázkov, pridaním zapisovateľnej vrchnej vrstvy a inicializáciou rôznych parametrov. Pretože kontajner má svoju vlastnú vrstvu na zápis a všetky zmeny sú uložené v tejto vrstve, viacero kontajnerov môže zdieľať prístup k rovnakému hlavnému obrázku.

Každý kontajner je možné nakonfigurovať prostredníctvom súboru v projekte docker-compose, ktorý je súčasťou hlavného riešenia – docker-compose.yml. Tam môžete nastaviť rôzne parametre, ako je názov kontajnera, porty, identifikátory, limity zdrojov, závislosti medzi inými kontajnermi. Ak v nastaveniach nešpecifikujete názov kontajnera, Docker vždy vytvorí nový kontajner a náhodne mu dá názov.

Keď sa kontajner spustí z obrázka, Docker pripojí súborový systém na čítanie a zápis na všetky vrstvy pod ním. Tu sa spustia všetky procesy, ktoré chceme, aby náš kontajner Docker spúšťal.

Keď Docker prvýkrát spustí kontajner, počiatočná vrstva na čítanie a zápis je prázdna. Keď nastanú zmeny, aplikujú sa na túto vrstvu; napríklad, ak chcete zmeniť súbor, tento súbor sa skopíruje z vrstvy určenej len na čítanie nižšie do vrstvy na čítanie a zápis.
Verzia súboru len na čítanie bude stále existovať, ale teraz je skrytá pod kópiou. Objemy sa používajú na ukladanie údajov bez ohľadu na životný cyklus kontajnera. Zväzky sa inicializujú pri vytvorení kontajnera.

Ako súvisí obrázok s kontajnerom?

obraz — hlavný prvok každého kontajnera. Obrázok je vytvorený zo súboru Dockerfile pridaného do projektu a je to súbor súborových systémov (vrstiev) navrstvených na sebe a zoskupených, len na čítanie; maximálny počet vrstiev je 127.

Srdcom každého obrázku je základný obrázok, ktorý je špecifikovaný príkazom FROM - vstupný bod pri vytváraní obrázku Dockerfile. Každá vrstva je vrstva len na čítanie a je reprezentovaná jedným príkazom, ktorý upravuje systém súborov, zapísaným v súbore Dockerfile.
Na spojenie týchto vrstiev do jedného obrázka používa Docker pokročilý viacvrstvový súborový systém Union (AuFS je postavený na UnionFS), ktorý umožňuje transparentné prekrytie rôznych súborov a adresárov z rôznych vrstiev súborov, čím sa vytvára súdržný súborový systém.

Vrstvy obsahujú metadáta, ktoré vám umožňujú ukladať súvisiace informácie o každej vrstve počas behu a zostavovania. Každá vrstva obsahuje prepojenie na ďalšiu vrstvu; ak vrstva nemá prepojenie, potom je to najvrchnejšia vrstva na obrázku.

Dockerfile môže obsahovať príkazy ako:

  • FROM — vstupný bod pri vytváraní obrazu;
  • SPRÁVCA - meno vlastníka obrázka;
  • RUN — vykonanie príkazu počas zostavovania obrazu;
  • ADD - skopírovanie hostiteľského súboru do nového obrázka, ak zadáte URL súboru, Docker ho stiahne do určeného adresára;
  • ENV - premenné prostredia;
  • CMD - spustí vytváranie nového kontajnera na základe obrázka;
  • ENTRYPOINT - príkaz sa vykoná pri spustení kontajnera.
  • WORKDIR je pracovný adresár na spustenie príkazu CMD.
  • USER - nastavuje UID pre kontajner vytvorený na základe obrázku.
  • VOLUME - pripojí hostiteľský adresár do kontajnera.
  • EXPOSE je množina portov počúvaných v kontajneri.

Ako funguje UnionFS?

UnionFS - pomocný zásobníkový súborový systém (FS) pre Linux a FreeBSD. Tento FS implementuje mechanizmus kopírovania pri zápise (Copy-On-Write, COW). Pracovnou jednotkou UnionFS je vrstva; každá vrstva by sa mala považovať za samostatný plnohodnotný súborový systém s hierarchiou adresárov od samotného koreňa. UnionFS vytvára spojenie pre iné súborové systémy a umožňuje, aby sa súbory a adresáre z rôznych súborových systémov (nazývané forky) skombinovali do jedného koherentného súborového systému, transparentne pre používateľa.

Obsahy adresárov s rovnakými cestami sa objavia spolu v jednom zjednotenom adresári (v jednom mennom priestore) výsledného súborového systému.

UnionFS kombinuje vrstvy na základe nasledujúcich princípov:

  • jedna z vrstiev sa stáva vrstvou najvyššej úrovne, druhá a nasledujúce vrstvy sa stávajú vrstvami nižšej úrovne;
  • objekty vrstiev sú užívateľovi dostupné „zhora nadol“, t.j. ak je požadovaný objekt v „hornej“ vrstve, vráti sa bez ohľadu na prítomnosť objektu s rovnakým názvom v „spodnej“ vrstve; inak sa vráti objekt „spodnej“ vrstvy; ak požadovaný objekt nie je ani tam, ani tam, vráti sa chyba „Žiadny takýto súbor alebo adresár“;
  • pracovná vrstva je „najvyššia“, to znamená, že všetky akcie používateľa na zmenu údajov sa prejavia iba na najvyššej úrovni bez ovplyvnenia obsahu vrstiev nižších úrovní.

Docker je najbežnejšia technológia na používanie kontajnerov na spúšťanie aplikácií. Stal sa štandardom v tejto oblasti, pričom stavia na cgroups a menných priestoroch poskytovaných jadrom Linuxu.

Docker nám umožňuje rýchlo nasadiť aplikácie a čo najlepšie využiť súborový systém rozdelením jadra OS medzi všetky kontajnery, ktoré bežia ako samostatné procesy OS.

Zdroj: hab.com

Pridať komentár