Architektura Docker a její komponenty pro začátečníky

Pojďme se blíže podívat na to, jak funguje Docker zevnitř a jaké jsou jeho klíčové stavební kameny.

Předpokládám, že již máte základní povědomí o Dockeru. Pokud tomu tak není, doporučuji se podívat na náš předchozí článek, který vám poskytne potřebný úvod.

Jistě si uvědomujete význam Dockeru v oblasti DevOps. Za tímto užitečným nástrojem se však skrývá důmyslná a propracovaná architektura. Co si o ní tedy povědět?

Než se ale do toho pustíme, pojďme si krátce připomenout, jaké virtualizační systémy jsme používali v minulosti a jaké používáme dnes.

Srovnání tradiční a moderní virtualizace

V minulosti jsme vytvářeli virtuální stroje, přičemž každý z nich měl svůj vlastní operační systém. To zabíralo velké množství diskového prostoru a celkově to bylo dost neefektivní.

S příchodem Docker kontejnerů je situace jiná. Všechny kontejnery sdílí jeden operační systém a jeho prostředky, což je činí lehkými a rychlými, s dobou spuštění v řádu sekund.

Architektura Dockeru

Níže naleznete zjednodušené schéma architektury Dockeru.

Nyní si jednotlivé komponenty této architektury podrobněji popíšeme.

Docker Engine

Jedná se o klíčovou součást celého Docker systému. Docker Engine je aplikace, která pracuje na principu klient-server. Je nainstalována na hostitelském počítači a skládá se ze tří hlavních částí:

  • Server: Docker démon, označovaný jako dockerd, který má na starosti vytváření a správu Docker obrazů, kontejnerů, sítí a dalších.
  • REST API: Rozhraní, které se používá pro komunikaci s Docker démonem a udávání instrukcí, co má provádět.
  • Příkazový řádek (CLI): Klient, který slouží k zadávání příkazů pro Docker.

Docker Klient

Uživatelé Dockeru interagují s Dockerem prostřednictvím klienta. Když uživatel zadá jakýkoli Docker příkaz, klient ho odešle Docker démonu dockerd, který ho následně provede. Docker příkazy využívají Docker API. Klient může komunikovat s více Docker démony.

Docker Registry

Toto je místo, kde jsou ukládány Docker obrazy. Může se jednat o veřejný registr nebo o soukromý registr Dockeru. Docker Hub je výchozí veřejné úložiště pro Docker obrazy. Můžete si také vytvořit a spravovat svůj vlastní soukromý registr.

Když spustíte příkazy docker pull nebo docker run, požadovaný Docker obraz se stáhne z nakonfigurovaného registru. Naopak, příkaz docker push nahraje Docker obraz do určeného registru.

Docker Objekty

Při práci s Dockerem se setkáte s různými objekty, jako jsou obrazy, kontejnery, svazky a sítě.

Obrazy

Docker obrazy jsou šablony určené pouze pro čtení, obsahující instrukce potřebné k vytvoření Docker kontejneru. Docker obrazy lze stahovat z Docker Hubu a používat je přímo, nebo je lze modifikovat přidáním dalších instrukcí a vytvořit tak nový, upravený obraz. Můžete také vytvářet své vlastní obrazy pomocí Dockerfile. Dockerfile je soubor s instrukcemi pro sestavení a spuštění kontejneru, na jehož základě je vytvořen nový Docker obraz.

Docker obraz se skládá ze základní vrstvy určené pouze pro čtení a z vrchní vrstvy, do které se zapisují změny. Při úpravě Dockerfile a opětovném sestavení se změní pouze horní vrstva, kde jsou uloženy upravené části.

Kontejnery

Po spuštění Docker obrazu vznikne Docker kontejner. Uvnitř kontejneru běží všechny aplikace a jejich prostředí. Ke spouštění, zastavování a odstraňování Docker kontejnerů lze využít Docker API nebo CLI.

Zde je příklad příkazu pro spuštění Ubuntu Docker kontejneru:

docker run -i -t ubuntu /bin/bash

Svazky

Trvalá data generovaná a používaná Docker kontejnery se ukládají do svazků. Svazky jsou kompletně spravovány Dockerem prostřednictvím Docker CLI nebo Docker API. Fungují jak v kontejnerech pro Windows, tak pro Linux. Místo ukládání dat do zapisovatelné vrstvy kontejneru je vždy lepší použít svazky. Obsah svazku existuje mimo životní cyklus kontejneru, čímž se nezvyšuje jeho velikost.

K přiřazení svazku ke kontejneru se používá parametr -v nebo --mount. V tomto příkladu je svazek geekvolume použit s kontejnerem etechblog.cz.

docker run -d --name etechblog.cz -v geekvolume:/app nginx:latest

Sítě

Docker networking je mechanismus, který umožňuje komunikaci mezi izolovanými kontejnery. Docker nabízí pět hlavních síťových ovladačů:

  • Bridge: Výchozí síťový ovladač pro kontejnery. Používá se, když aplikace běží v samostatných kontejnerech, které komunikují v rámci stejného Docker hostitele.
  • Host: Tento ovladač ruší síťovou izolaci mezi Docker kontejnery a hostitelem. Používá se, pokud není potřeba izolace mezi hostitelem a kontejnery.
  • Overlay: Umožňuje službám swarm vzájemně komunikovat. Používá se, když kontejnery běží na různých Docker hostitelích nebo když jsou služby swarm tvořeny více aplikacemi.
  • None: Tento ovladač zakáže veškeré sítě.
  • Macvlan: Tento ovladač přiděluje kontejnerům MAC adresy, čímž se tváří jako fyzická zařízení. Provoz mezi kontejnery probíhá přes tyto MAC adresy. Používá se, když chcete, aby se kontejnery chovaly jako fyzická zařízení, například při migraci virtuálních strojů.

Závěrem

Doufám, že vám tento článek poskytl dobrý přehled o architektuře Dockeru a jeho základních součástech. Prohlubte své znalosti Dockeru a pokud máte zájem o praktické školení, doporučuji tento Kurz Docker Mastery.

Líbil se vám tento článek? Neváhejte se o něj podělit se svými přáteli!