Porozumění Dockerovi

Docker používám již několik měsíců ke strukturování procesu vývoje/doručování webových projektů. Čtenářům Habrakhabru nabízím překlad úvodního článku o dockeru - "Porozumění dockeru".

Co je to docker?

Docker je otevřená platforma pro vývoj, poskytování a provoz aplikací. Docker je navržen tak, aby doručoval vaše aplikace rychleji. Pomocí dockeru můžete svou aplikaci oddělit od infrastruktury a považovat ji za spravovanou aplikaci. Docker vám pomůže rychleji odesílat kód, rychleji testovat, rychleji odesílat aplikace a zkrátit dobu mezi psaním kódu a spuštěním kódu. Docker to dělá prostřednictvím odlehčené platformy pro virtualizaci kontejnerů s využitím procesů a nástrojů, které vám pomohou spravovat a hostovat vaše aplikace.

Ve svém jádru vám docker umožňuje spouštět téměř jakoukoli aplikaci, bezpečně izolovanou v kontejneru. Bezpečná izolace vám umožňuje provozovat mnoho kontejnerů na stejném hostiteli současně. Lehká povaha kontejneru, který běží bez další zátěže hypervizoru, vám umožňuje získat více z vašeho hardwaru.

Platforma a nástroje pro virtualizaci kontejnerů mohou být užitečné v následujících případech:

  • zabalení vaší aplikace (a komponent, které používáte) do kontejnerů dockerů;
  • distribuce a dodání těchto kontejnerů vašim týmům pro vývoj a testování;
  • rozmístění těchto kontejnerů na vašich výrobních místech, jak v datových centrech, tak v cloudu.

K čemu mohu použít docker?

Rychle publikujte své aplikace

Docker je skvělý pro organizaci vývojového cyklu. Docker umožňuje vývojářům spouštět místní kontejnery s aplikacemi a službami. Což následně umožňuje integraci s procesem nepřetržité integrace a workflow nasazení.

Vaši vývojáři například píší kód lokálně a sdílejí svůj vývojový zásobník (soubor obrazů Dockeru) s kolegy. Když jsou připraveni, odešlou kód a kontejnery na testovací web a provedou všechny potřebné testy. Z testovacího místa mohou odesílat kód a obrázky do výroby.

Jednodušší rozložení a rozložení

Platforma založená na kontejnerech dockerů usnadňuje portování vašeho užitečného zatížení. Kontejnery Docker mohou běžet na vašem místním počítači, buď skutečném, nebo na virtuálním počítači v datovém centru nebo v cloudu.

Přenosnost a lehkost dockeru usnadňuje dynamickou správu vaší pracovní zátěže. Docker můžete použít k nasazení nebo vypnutí aplikace nebo služeb. Rychlost dockeru to umožňuje téměř v reálném čase.

Vyšší zatížení a více užitečného zatížení

Docker je lehký a rychlý. Poskytuje odolnou a nákladově efektivní alternativu k virtuálním strojům založeným na hypervizoru. Je to užitečné zejména v prostředích s vysokou zátěží, například při vytváření vlastního cloudu nebo platformy jako služby. Ale je také užitečné pro malé a středně velké aplikace, když chcete ze zdrojů, které máte, získat více.

Hlavní součásti dockeru

Docker se skládá ze dvou hlavních součástí:

  • Docker: open source virtualizační platforma;
  • Docker Hub: Naše platforma jako služba pro distribuci a správu kontejnerů Docker.

Poznámka! Docker je distribuován pod licencí Apache 2.0.

Architektura dockeru

Docker používá architekturu klient-server. Klient Docker komunikuje s démonem Docker, který přebírá břemeno vytváření, spouštění a distribuce vašich kontejnerů. Klient i server mohou běžet na stejném systému, klienta můžete připojit ke vzdálenému démonovi dockeru. Klient a server komunikují prostřednictvím soketu nebo RESTful API.

Porozumění Dockerovi

Démon Docker

Jak je znázorněno na obrázku, démon běží na hostitelském počítači. Uživatel nekomunikuje přímo se serverem, ale používá k tomu klienta.

Docker klient

Klient Docker, program docker, je hlavním rozhraním pro Docker. Přijímá příkazy od uživatele a spolupracuje s démonem dockeru.

Uvnitř dokovací stanice

Abyste pochopili, z čeho se docker skládá, musíte vědět o třech komponentách:

  • snímky
  • registru
  • kontejnery

Obrázky

Obrázek Dockeru je šablona pouze pro čtení. Obrázek může například obsahovat operační systém Ubuntu s Apache a aplikací na něm. Obrázky se používají k vytváření kontejnerů. Docker usnadňuje vytváření nových obrázků, aktualizaci stávajících nebo si můžete stahovat obrázky vytvořené jinými lidmi. Obrázky jsou součástí sestavení dockeru.

Registr

Registr Docker ukládá obrázky. Existují veřejné a soukromé registry, ze kterých můžete stahovat nebo nahrávat obrázky. Veřejný registr Docker je Docker hub. Je tam uložena obrovská sbírka obrázků. Jak víte, obrázky můžete vytvářet sami nebo můžete použít obrázky vytvořené jinými uživateli. Registry jsou součástí distribuce.

kontejnery

Kontejnery jsou podobné adresářům. Kontejnery obsahují vše, co aplikace potřebuje ke svému běhu. Každý kontejner je vytvořen z obrázku. Kontejnery lze vytvářet, spouštět, zastavovat, migrovat nebo mazat. Každý kontejner je izolovaný a poskytuje aplikaci bezpečnou platformu. Kontejnery jsou součástí díla.

Jak tedy Docker funguje?

Zatím víme, že:

  • můžeme vytvářet obrázky, ve kterých jsou umístěny naše aplikace;
  • můžeme vytvářet kontejnery z obrázků pro spouštění aplikací;
  • Můžeme distribuovat obrázky prostřednictvím Docker Hub nebo jiného registru obrázků.

Pojďme se podívat, jak do sebe tyto komponenty zapadají.

Jak obraz funguje?

Již víme, že obrázek je šablona pouze pro čtení, ze které je vytvořen kontejner. Každý obrázek se skládá ze sady úrovní. Docker používá unijní souborový systém spojit tyto úrovně do jednoho obrázku. Union file system umožňuje souborům a adresářům z různých souborových systémů (různých větví) transparentně se překrývat a vytvářet tak ucelený souborový systém.

Jedním z důvodů, proč je docker lehký, je to, že používá vrstvy jako je tato. Když změníte obrázek, například aktualizujete aplikaci, vytvoří se nová vrstva. Takže bez nahrazení celého obrazu nebo jeho opětovného sestavení, jak to možná budete muset udělat s virtuálním počítačem, se přidá nebo aktualizuje pouze vrstva. A nemusíte distribuovat celý nový obrázek, distribuuje se pouze aktualizace, což usnadňuje a urychluje distribuci obrázků.

Základem každého obrázku je základní obrázek. Například ubuntu, základní obraz Ubuntu, nebo fedora, základní obraz distribuce Fedora. Obrázky můžete také použít jako základ pro vytváření nových obrázků. Pokud máte například obrázek Apache, můžete jej použít jako základní obrázek pro vaše webové aplikace.

Poznámka! Docker obvykle stahuje obrázky z registru Docker Hub.

Z těchto základních obrazů lze vytvořit docker obrazy; kroky k vytvoření těchto obrazů nazýváme instrukce. Každá instrukce vytváří nový obrázek nebo úroveň. Pokyny budou následující:

  • spustit příkaz
  • přidání souboru nebo adresáře
  • vytvoření proměnné prostředí
  • pokyny, co spustit při spuštění kontejneru tohoto obrazu

Tyto instrukce jsou uloženy v souboru Dockerfile. Docker to čte Dockerfile, když vytvoříte obraz, provede tyto instrukce a vrátí konečný obraz.

Jak funguje registr dockerů?

Registr je úložiště pro obrázky dockeru. Jakmile je obraz vytvořen, můžete jej publikovat do veřejného registru Docker Hub nebo do svého osobního registru.

Pomocí klienta dockeru můžete vyhledávat již publikované obrázky a stahovat je do svého dockeru a vytvářet kontejnery.

Docker Hub poskytuje veřejná a soukromá úložiště obrázků. Vyhledávání a stahování obrázků z veřejných úložišť je dostupné všem. Obsah soukromých úložišť není zahrnut ve výsledcích vyhledávání. A pouze vy a vaši uživatelé můžete přijímat tyto obrázky a vytvářet z nich kontejnery.

Jak kontejner funguje?

Kontejner se skládá z operačního systému, uživatelských souborů a metadat. Jak víme, každý kontejner je vytvořen z obrázku. Tento obrázek říká dockeru, co je v kontejneru, jaký proces spustit, kdy se kontejner spustí a další konfigurační data. Obrázek Dockeru je pouze pro čtení. Když docker spustí kontejner, vytvoří nad obrazem vrstvu pro čtení/zápis (pomocí unijního souborového systému, jak bylo uvedeno výše), ve které lze aplikaci spustit.

Co se stane, když se kontejner spustí?

Nebo pomocí programu docker, nebo pomocí RESTful API, klient dockeru řekne démonovi dockeru, aby spustil kontejner.

$ sudo docker run -i -t ubuntu /bin/bash

Pojďme se na tento příkaz podívat. Klient se spouští pomocí příkazu docker, s možností run, který říká, že bude spuštěn nový kontejner. Minimální požadavky pro spuštění kontejneru jsou následující atributy:

  • který obrázek použít k vytvoření kontejneru. V našem případě ubuntu
  • příkaz, který chcete spustit při spuštění kontejneru. V našem případě /bin/bash

Co se stane pod kapotou, když spustíme tento příkaz?

Docker v daném pořadí dělá následující:

  • stáhne obrázek ubuntu: docker zkontroluje dostupnost obrázku ubuntu na místním počítači, a pokud tam není, stáhněte si jej z Docker hub. Pokud existuje obrázek, použije jej k vytvoření kontejneru;
  • vytvoří kontejner: když je obrázek přijat, docker jej použije k vytvoření kontejneru;
  • inicializuje souborový systém a připojí úroveň pouze pro čtení: kontejner je vytvořen v systému souborů a obrázek je přidán do úrovně pouze pro čtení;
  • inicializuje síť/most: vytváří síťové rozhraní, které umožňuje dockeru komunikovat s hostitelským počítačem;
  • Nastavení IP adresy: najde a nastaví adresu;
  • Spustí zadaný proces: spustí vaši aplikaci;
  • Zpracuje a vytvoří výstup z vaší aplikace: připojuje a zaznamenává standardní vstup, výstup a chybový proud vaší aplikace, takže můžete sledovat, jak si vaše aplikace vede.

Nyní máte funkční kontejner. Můžete spravovat svůj kontejner, komunikovat s aplikací. Když se rozhodnete aplikaci zastavit, odstraňte kontejner.

Použité technologie

Docker je napsán v Go a používá některé funkce linuxového jádra k implementaci výše uvedené funkce.

Jmenné prostory

Docker využívá technologii namespaces organizovat izolovaná pracovní místa, která nazýváme kontejnery. Když spustíme kontejner, docker vytvoří sadu jmenných prostorů pro tento kontejner.

To vytváří izolovanou vrstvu, kde každý aspekt kontejneru běží ve svém vlastním jmenném prostoru a nemá přístup k externímu systému.

Seznam některých jmenných prostorů, které docker používá:

  • pid: izolovat proces;
  • síť: pro správu síťových rozhraní;
  • ipc: ke správě zdrojů IPC. (ICP: InterProccess Communication);
  • mnt: spravovat přípojné body;
  • utc: k izolaci generování jádra a řídicí verze (UTC: Unixový systém timesharing).

Kontrolní skupiny

Technologie využívá i Docker cgroups nebo kontrolní skupiny. Klíčem ke spuštění aplikace v izolaci je poskytnout aplikaci pouze prostředky, které chcete poskytnout. To zajišťuje, že kontejnery budou dobrými sousedy. Kontrolní skupiny umožňují sdílet dostupné hardwarové prostředky a v případě potřeby nastavit limity a omezení. Omezte například možné množství paměti pro kontejner.

Union File System

Union File Sysem nebo UnionFS je souborový systém, který funguje na principu vytváření vrstev, díky čemuž je velmi lehký a rychlý. Docker používá UnionFS k vytvoření bloků, ze kterých je kontejner sestaven. Docker může používat několik variant UnionFS včetně: AUFS, btrfs, vfs a DeviceMapper.

Formáty kontejnerů

Docker kombinuje tyto komponenty do obalu, který nazýváme formát kontejneru. Výchozí formát se nazývá libcontainer. Docker také podporuje tradiční formát kontejneru v Linuxu LXC. V budoucnu může Docker podporovat další formáty kontejnerů. Například integrace s BSD Jails nebo Solaris Zones.

Zdroj: www.habr.com

Přidat komentář