VM nebo Docker?

Jak pochopit, že potřebujete Docker a ne VM? Musíte si určit, co přesně chcete izolovat. Pokud chcete izolovat systém se zaručenými prostředky a virtuálním hardwarem, pak by volba měla padnout na VM. Pokud potřebujete izolovat spuštěné aplikace jako samostatné systémové procesy, budete potřebovat Docker.

Jaký je tedy rozdíl mezi kontejnery Docker a virtuálními počítači?

Virtuální stroj (VM) je virtuální počítač se všemi virtuálními zařízeními a virtuálním pevným diskem, na kterém je nainstalován nový nezávislý OS spolu s ovladači virtuálních zařízení, správou paměti a dalšími komponentami. To znamená, že získáme abstrakci fyzického hardwaru, která vám umožní provozovat mnoho virtuálních počítačů na jednom počítači.
Nainstalovaný virtuální počítač může zabírat místo na disku různými způsoby:

  • pevné místo na pevném disku, které umožňuje rychlejší přístup k virtuálnímu pevnému disku a zabraňuje fragmentaci souborů;
  • dynamická alokace paměti. Při instalaci dalších aplikací jim bude paměť dynamicky přidělována, dokud nedosáhne maximálního množství, které je jí přiděleno.

Čím více virtuálních počítačů je na serveru, tím více místa zabírají a také vyžadují neustálou podporu prostředí potřebného pro fungování vaší aplikace.

přístavní dělník je software pro vytváření aplikací založených na kontejnerech. Kontejnery a virtuální stroje mají podobné výhody, ale fungují odlišně. Kontejnery zabírají méně místa, protože nadměrně využívá více sdílených prostředků hostitelského systému než virtuální počítač, protože na rozdíl od VM poskytuje virtualizaci na úrovni operačního systému, nikoli hardwaru. Tento přístup poskytuje menší nároky na paměť, rychlejší nasazení a snadnější škálování.

Kontejner poskytuje efektivnější mechanismus pro zapouzdření aplikací tím, že poskytuje nezbytná rozhraní hostitelskému systému. Tato funkce umožňuje kontejnerům sdílet jádro systému, kde každý z kontejnerů běží jako samostatný proces hlavního OS, který má vlastní sadu paměťových oblastí (vlastní virtuální adresní prostor). Protože virtuální adresní prostor každého kontejneru je jeho vlastní, data patřící do různých paměťových oblastí nelze změnit.
Nativní OS pro Docker je Linux (Docker lze použít i na Windows a MacOS), využívá jeho hlavních výhod, které mu umožňují organizovat rozdělené jádro. Spuštění kontejnerů Docker na Windows bude probíhat uvnitř virtuálního počítače Linux. kontejnery sdílejí OS hostitelského systému a hlavním OS pro ně je Linux.

Kontejner - jak to funguje?

kontejner je abstrakce na aplikační úrovni, která kombinuje kód a závislosti. Kontejnery jsou vždy vytvořeny z obrázků, přidáním zapisovatelné horní vrstvy a inicializací různých parametrů. Protože kontejner má svou vlastní vrstvu pro zápis a všechny změny jsou uloženy v této vrstvě, může více kontejnerů sdílet přístup ke stejnému hlavnímu obrazu.

Každý kontejner lze konfigurovat prostřednictvím souboru v projektu docker-compose, který je součástí hlavního řešení, docker-compose.yml. Zde můžete nastavit různé parametry, jako je název kontejneru, porty, identifikátory, limity zdrojů, závislosti mezi jinými kontejnery. Pokud v nastavení nezadáte název kontejneru, Docker pokaždé vytvoří nový kontejner a náhodně mu přiřadí název.

Když je kontejner spuštěn z obrazu, Docker připojí souborový systém pro čtení/zápis na všechny vrstvy pod ním. Zde poběží všechny procesy, které chceme, aby náš kontejner Docker běžel.

Když Docker poprvé spustí kontejner, počáteční vrstva pro čtení/zápis je prázdná. Když dojde ke změnám, použijí se na tuto vrstvu; například pokud chcete upravit soubor, bude tento soubor zkopírován z vrstvy pouze pro čtení níže do vrstvy pro čtení a zápis.
Verze souboru pouze pro čtení bude stále existovat, ale je nyní skryta pod kopií. Svazky se používají k ukládání dat bez ohledu na životní cyklus kontejneru. Svazky se inicializují při vytvoření kontejneru.

Jak je obrázek spojen s kontejnerem?

Obrázek - hlavní prvek pro každý kontejner. Obraz je vytvořen z Dockerfile přidaného do projektu a je sadou souborových systémů (vrstev) navrstvených na sobě a seskupených dohromady, dostupných pouze pro čtení; maximální počet vrstev je 127.

Srdcem každého obrázku je základní obrázek, který je určen příkazem FROM - vstupní bod při generování obrázku Dockerfile. Každá vrstva je vrstva pouze pro čtení a je reprezentována jedním příkazem, který upravuje systém souborů, zapsaným v Dockerfile.
Ke spojení těchto vrstev do jednoho obrazu používá Docker pokročilý vícevrstvý souborový systém Union (AuFS je postaven na UnionFS), který umožňuje průhledné překrývání různých souborů a adresářů z různých vrstev souborů a vytváří přidružený systém souborů.

Vrstvy obsahují metadata, která vám umožňují ukládat související informace o každé vrstvě za běhu a sestavení. Každá vrstva obsahuje odkaz na další vrstvu, pokud vrstva nemá žádný odkaz, pak je to nejvyšší vrstva na obrázku.

Dockerfile může obsahovat příkazy jako:

  • FROM - vstupní bod při vytváření obrazu;
  • SPRÁVCE - jméno vlastníka obrazu;
  • RUN - provádění příkazu během sestavování obrazu;
  • ADD - zkopírování hostitelského souboru do nového obrázku, pokud zadáte URL soubor, Docker jej stáhne do zadaného adresáře;
  • ENV - proměnné prostředí;
  • CMD - spustí vytváření nového kontejneru na základě obrázku;
  • ENTRYPOINT - Příkaz se provede při spuštění kontejneru.
  • WORKDIR je pracovní adresář pro provádění příkazu CMD.
  • USER – Nastaví UID pro kontejner vytvořený z obrázku.
  • VOLUME - Připojí hostitelský adresář ke kontejneru.
  • EXPOSE je sada portů naslouchaných v kontejneru.

Jak funguje UnionFS?

UnionFS — service stack file system (FS) pro Linux a FreeBSD. Tento FS implementuje mechanismus kopírování při zápisu (Copy-On-Write, COW). Pracovní jednotkou UnionFS je vrstva, každá vrstva by měla být považována za samostatný plnohodnotný souborový systém s hierarchií adresářů od samotného kořene. UnionFS vytváří sjednocovací připojení pro jiné souborové systémy a umožňuje transparentně slučovat soubory a adresáře z různých souborových systémů (tzv. větve) do jednoho propojeného souborového systému, transparentně pro uživatele.

Obsah adresářů se stejnými cestami bude zobrazen společně v jednom kombinovaném adresáři (ve stejném jmenném prostoru) výsledného souborového systému.

UnionFS kombinuje vrstvy na základě následujících principů:

  • jedna z vrstev se stane vrstvou nejvyšší úrovně, druhá a následující vrstvy se stanou vrstvami nižší úrovně;
  • objekty vrstev jsou uživateli přístupné „shora dolů“, tzn. pokud je požadovaný objekt v „horní“ vrstvě, je vrácen bez ohledu na přítomnost objektu se stejným názvem v „dolní“ vrstvě; jinak je vrácen objekt "spodní" vrstvy; pokud požadovaný objekt není ani tam, ani tam, vrátí se chyba "Žádný takový soubor nebo adresář";
  • pracovní vrstva je „nejvyšší“, to znamená, že všechny akce uživatele ke změně dat se projeví pouze na vrstvě nejvyšší úrovně, aniž by to ovlivnilo obsah vrstev nižší úrovně.

Docker je nejběžnější technologie pro použití kontejnerů při práci s aplikacemi. Stal se standardem v této oblasti a staví na cgroups a jmenných prostorech poskytovaných linuxovým jádrem.

Docker nám umožňuje rychle nasazovat aplikace a co nejlépe využívat systém souborů sdílením jádra OS mezi všemi kontejnery, které běží jako samostatné procesy OS.

Zdroj: www.habr.com

Přidat komentář