Co je Docker?

Tip

Tento obsah je výňatek z eBooku, architektury mikroslužeb .NET pro kontejnerizované aplikace .NET, které jsou k dispozici na .NET Docs nebo jako zdarma ke stažení PDF, které lze číst offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Docker je opensourcový projekt pro automatizaci nasazení aplikací jako přenositelných, samoobslužných kontejnerů, které můžou běžet v cloudu nebo místně. Docker je také společnost , která podporuje a vyvíjí tuto technologii, pracuje ve spolupráci s dodavateli cloudu, Linuxu a Windows, včetně Microsoftu.

Diagram showing the places Docker containers can run.

Obrázek 2–2 Docker nasazuje kontejnery ve všech vrstvách hybridního cloudu.

Kontejnery Dockeru můžou běžet kdekoli, místně v datacentru zákazníka, v externím poskytovateli služeb nebo v cloudu v Azure. Kontejnery imagí Dockeru se dají nativně spouštět v Linuxu a Windows. Image Windows se ale můžou spouštět jenom na hostitelích s Windows a imagích Linuxu na hostitelích s Linuxem a hostitelích s Windows (zatím pomocí virtuálního počítače s Hyper-V Linuxem), kde hostitel znamená server nebo virtuální počítač.

Vývojáři můžou používat vývojová prostředí ve Windows, Linuxu nebo macOS. Vývojář na vývojovém počítači spustí hostitele Dockeru, kde jsou nasazené image Dockeru, včetně aplikace a jejích závislostí. Vývojáři, kteří pracují v Linuxu nebo macOS, používají hostitele Dockeru, který je založený na Linuxu, a můžou vytvářet image jenom pro kontejnery Linuxu. (Vývojáři pracující na macOS můžou upravovat kód nebo spouštět rozhraní příkazového řádku Dockeru z macOS, ale v době psaní tohoto textu se kontejnery nespouštějí přímo v macOS.) Vývojáři, kteří pracují ve Windows, můžou vytvářet image pro linuxové kontejnery nebo kontejnery Windows.

K hostování kontejnerů ve vývojových prostředích a poskytování dalších vývojářských nástrojů dodává Docker Desktop pro Windows nebo macOS. Tyto produkty nainstalují potřebný virtuální počítač (hostitel Dockeru) pro hostování kontejnerů.

Ke spouštění kontejnerů Windows existují dva typy modulů runtime:

  • Kontejnery Windows Serveru poskytují izolaci aplikací prostřednictvím technologie izolace procesů a oborů názvů. Kontejner Windows Serveru sdílí jádro s hostitelem kontejneru a se všemi kontejnery spuštěnými na hostiteli.

  • Kontejnery Hyper-V rozšiřují izolaci poskytovanou kontejnery Windows Serveru spuštěním každého kontejneru v vysoce optimalizovaném virtuálním počítači. V této konfiguraci se jádro hostitele kontejneru nesdílí s kontejnery Hyper-V a poskytuje lepší izolaci.

Image pro tyto kontejnery se vytvářejí stejným způsobem a fungují stejně. Rozdíl spočívá v tom, jak se kontejner vytvoří z image, na které běží kontejner Hyper-V, vyžaduje další parametr. Podrobnosti najdete v tématu Kontejnery Technologie Hyper-V.

Porovnání kontejnerů Dockeru s virtuálními počítači

Obrázek 2–3 ukazuje porovnání mezi virtuálními počítači a kontejnery Dockeru.

Virtual Machines Kontejnery Dockeru
Diagram showing the hardware/software stack of a traditional VM. Diagram showing the hardware/software stack for Docker containers.
Mezi virtuální počítače patří aplikace, požadované knihovny nebo binární soubory a úplný hostovaný operační systém. Úplná virtualizace vyžaduje více prostředků než kontejnerizace. Kontejnery zahrnují aplikaci a všechny její závislosti. Sdílí však jádro operačního systému s jinými kontejnery, které běží jako izolované procesy v uživatelském prostoru v hostitelském operačním systému. (S výjimkou kontejnerů Hyper-V, kde každý kontejner běží uvnitř speciálního virtuálního počítače na kontejner.)

Obrázek 2–3 Porovnání tradičních virtuálních počítačů s kontejnery Dockeru

Pro virtuální počítače existují tři základní vrstvy na hostitelském serveru, odspodu: infrastruktura, hostitelský operační systém a hypervisor a nad vše, co má každý virtuální počítač vlastní operační systém a všechny potřebné knihovny. V případě Dockeru má hostitelský server pouze infrastrukturu a operační systém a nad tím kontejnerový modul, který udržuje kontejner izolovaný, ale sdílí základní služby operačního systému.

Vzhledem k tomu, že kontejnery vyžadují mnohem méně prostředků (například nepotřebují úplný operační systém), je snadné je nasadit a rychle začít. To vám umožní mít vyšší hustotu, což znamená, že umožňuje spouštět více služeb na stejné hardwarové jednotce, což snižuje náklady.

Vedlejším účinkem spouštění na stejném jádru je menší izolace než virtuální počítače.

Hlavním cílem image je, že prostředí (závislosti) je stejné napříč různými nasazeními. To znamená, že ho můžete ladit na svém počítači a pak ho nasadit do jiného počítače se stejnou zárukou prostředí.

Image kontejneru je způsob, jak zabalit aplikaci nebo službu a nasadit ji spolehlivým a reprodukovatelným způsobem. Můžete říct, že Docker není jen technologie, ale také filozofie a proces.

Když používáte Docker, neuslyšíte, že vývojáři říkají: "Funguje na mém počítači, proč ne v produkčním prostředí?" Můžou jednoduše říct, že běží v Dockeru, protože zabalená aplikace Dockeru se dá spustit v libovolném podporovaném prostředí Dockeru a spustí způsob, jakým byl zamýšlený pro všechny cíle nasazení (jako je Vývoj, kontrola kvality, příprava a produkční prostředí).

Jednoduchá analogie

Možná jednoduchá analogie může pomoct pochopit základní koncept Dockeru.

Pojďme se na chvíli vrátit do roku 1950. Nebyly tam žádné textové procesory a fotokopírky byly použity všude (druh).

Představte si, že zodpovídáte za rychlé vydávání dávek dopisů podle potřeby, aby je bylo možné poslat zákazníkům pomocí skutečného papíru a obálek, aby se fyzicky doručovaly na adresu každého zákazníka (tam pak nebyl žádný e-mail).

V určitém okamžiku si uvědomíte, že písmena jsou jen složení velké sady odstavců, které jsou vybrány a uspořádány podle potřeby podle účelu dopisu, takže navrhnete systém pro rychlé vydávání dopisů, očekáváte, že dostanete hefty zvýšit.

Systém je jednoduchý:

  1. Začnete s balíčkem průhledných listů, které obsahují každý odstavec.

  2. Pokud chcete vydat sadu písmen, vyberte listy s odstavci, které potřebujete, a pak je zarovnáte tak, aby vypadaly a četly dobře.

  3. Nakonec umístěte sadu do fotokopírky a stisknutím klávesy Start vytvořte tolik písmen, kolik je třeba.

To je tedy základní myšlenka Dockeru.

V Dockeru je každá vrstva výslednou sadou změn, ke kterým dochází v systému souborů po spuštění příkazu, jako je například instalace programu.

Když se tedy "podíváte" na systém souborů po zkopírování vrstvy, uvidíte všechny soubory, které jsou součástí vrstvy při instalaci programu.

Image si můžete představit jako pomocný pevný disk jen pro čtení připravený k instalaci v "počítači", kde je operační systém již nainstalován.

Podobně si kontejner můžete představit jako "počítač" s nainstalovaným pevným diskem image. Kontejner může být stejně jako počítač zapnutý nebo vypnutý.