Co je Docker?

Docker je open source projekt pro automatizaci nasazování aplikací jako přenosných, soběstačných kontejnerů, které se mohou spouštět v cloudu nebo místně. Docker je také společnost, která tuto technologii podporuje a vyvíjí ve spolupráci s cloudem, Linuxem a Windows, včetně Microsoftu.

Diagram znázorňující místa, kde je možné spouštět kontejnery Dockeru

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

Kontejnery Dockeru mohou běžet kdekoli, místně v zákaznickém datacentru, u externího poskytovatele služeb nebo v cloudu, v Azure. Kontejnery i image Dockeru mohou běžet nativně v Linuxu a Windows. Image Windows však mohou běžet jenom na hostitelích Windows Windows image Linuxu se mohou spouštět na hostitelích s Linuxem Windows (zatím pomocí virtuálního počítače Hyper-V s Linuxem), kde hostitel znamená server nebo virtuální počítač.

Vývojáři mohou používat vývojová prostředí v Windows, Linuxu nebo macOS. Na vývojovém počítači spustí vývojář hostitele Dockeru, ve kterém 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 mohou vytvářet image jenom pro kontejnery Linuxu. (Vývojáři pracující v systému macOS mohou 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ěl přímo v systému macOS.) Vývojáři, kteří pracují na Windows mohou vytvářet image pro Linux nebo Windows Containers.

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

Pokud chcete Windows Kontejnery, existují dva typy modulu runtime:

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

  • Kontejnery Hyper-V rozšiřují izolaci, kterou poskytuje Windows Server Containers, tím, že každý kontejner běží na vysoce optimalizovaném virtuálním počítači. V této konfiguraci není jádro hostitele kontejneru sdílené s kontejnery Hyper-V, což poskytuje lepší izolaci.

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

Virtual Machines Kontejnery Dockeru
Diagram znázorňující hardwarový/softwarový zásobník tradičního virtuálního počítače Diagram znázorňující zásobník hardwaru a softwaru pro kontejnery Dockeru
Virtuální počítače zahrnují aplikaci, požadované knihovny nebo binární soubory a úplný hostující operační systém. Úplná virtualizace vyžaduje více prostředků než kontejnerizace. Kontejnery zahrnují aplikaci a všechny její závislosti. Sdílejí ale 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 jsou na hostitelském serveru tři základní vrstvy, zdola nahoru: infrastruktura, hostitelský operační systém a hypervisor a navíc každý virtuální počítač má svůj 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 modul kontejneru, 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 nepožadují plný operační systém), je snadné je nasadit a začít rychle. Díky tomu můžete 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 efektem spuštění na stejném jádru je menší izolace než u virtuálních počítače.

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

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

Při použití Dockeru nebudete slyšet vývojáře, kteří říkají: "Funguje to na mém počítači, proč ne v produkčním prostředí?" Mohou jednoduše říct, že běží v Dockeru, protože zabalenou aplikaci Dockeru je možné spustit v jakémkoli podporovaném prostředí Dockeru a běží tak, jak byla zamýšlena na všech cílech nasazení (jako je vývoj, qa, pracovní 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 50. let 20. 20. Nebyly k dispozici žádné textové procesory a kopírky se používaly všude (druh).

Imagine jste zodpovědní za rychlé vydávání dávek dopisů podle potřeby, jejich odeslání zákazníkům pomocí skutečného papíru a obálek, které se fyzicky doručí na adresu každého zákazníka (tehdy nebyl žádný e-mail).

V nějakém okamžiku si uvědomíte, že písmena jsou jen složením velké sady odstavců, které jsou vybrány a uspořádány podle potřeby podle účelu písmene, takže jste vyhověli systému, který bude rychle vydávat písmena a očekáváte, že bude mít velké zvýšení.

Systém je jednoduchý:

  1. Začnete s balíček průhledného listu, který obsahuje každý odstavec.

  2. Pokud chcete vydat sadu písmen, vyberte listy s odstavci, které potřebujete, a pak je skládejte a zarovnejte tak, aby vypadaly a četly správně.

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

Zjednodušení je tedy základní myšlenkou Dockeru.

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

Takže když se "podíváte" na systém souborů po zkopírování vrstvy, zobrazí se všechny soubory, včetně vrstvy při instalaci programu.

Image si můžete myslet jako pomocný pevný disk jen pro čtení, který je připravený k instalaci do "počítače", kde už je operační systém nainstalovaný.

Podobně si kontejner můžete myslet jako na "počítač" s nainstalovaným pevným diskem image. Kontejner je stejně jako počítač možné za zapnutý nebo vypnutý.