Úvod
Nasazení kontejneru je praktický způsob, jak zajistit přenositelnost, škálovatelnost a agilitu ve světě DevOps. Od testování po produkci usnadňují kontejnery celý proces vývoje softwaru.
Platformy pro správu kontejnerů a orchestraci jsou navrženy tak, aby byly pro koncového uživatele intuitivní a přímočaré. Samotné platformy jsou však složité a sestávají z více koordinovaných projektů.
Tento článek vysvětlí rozdíly mezi třemi důležitými částmi ekosystému správy kontejnerů – Docker, kontejnery a CRI-O.
Ekosystém kontejneru
Docker a Kubernetes jsou dvě přední platformy v ekosystému kontejnerů. Pro zajištění interoperability se komunita dohodla na několika standardech.
Dva nejdůležitější standardy jsou:
- CRI - Rozhraní pro běh kontejneru. Umožňuje, aby byl Kubernetes kompatibilní s různými běhovými prostředími kontejnerů, včetně containerd společnosti Docker .
- OCI - Open Container Initiative. Standardizuje obrázky kontejnerů a běhové prostředí.
Níže uvedená infografika ukazuje, jak CRI a OCI pomáhají propojit Kubernetes s Dockerem:
Docker
Docker je soubor projektů správy kontejnerů provozovaných společností s názvem Docker. Tyto projekty spolupracují na poskytování komplexní platformy pro nasazení kontejnerů.
Nejdůležitější projekty jsou:
- docker CLI - Program rozhraní příkazového řádku. Uživatelé vytvářejí a spravují kontejnery Docker vydáváním příkazů CLI dockeru.
- kontejner - Démon, který naslouchá uživatelským příkazům. Stahuje a ukládá požadované obrázky a řídí životní cyklus kontejneru.
- runC - Lehký, přenosný kontejner runtime. runC je nízkoúrovňová komponenta, která integruje komponenty nezbytné pro interakci Dockeru s místním systémem. Kontejnery, které tento nástroj vytváří, jsou kompatibilní s OCI.
Obrázky dockeru
Obrázek Dockeru je šablona pouze pro čtení, která obsahuje kód aplikace spolu s knihovnami, nástroji a dalšími závislostmi nezbytnými pro správné fungování aplikace. Když uživatel vydá příkaz run v Dockeru, šablona obrázku se použije k nasazení kontejneru aplikace.
Obrázky Docker se vytvářejí pomocí Dockerfile, textového dokumentu, který obsahuje potřebné informace o obrázku. build
příkaz používá Dockerfile a kontext k vytvoření obrázku.
Docker pro Kubernetes
Container Runtime Interface je plugin, který umožňuje Kubernetes komunikovat s jinými běhovými prostředími kontejnerů. Protože však Docker neimplementuje CRI, Kubernetes představil vrstvu kompatibility nazvanou dockershim . Tato vrstva spojuje dvě rozhraní API.
Od verze 1.23 vyžaduje Kubernetes runtime, aby byla kompatibilní s CRI. Znamená to, že dockershim je nyní zastaralý a Docker Engine již není podporován jako runtime. Kubernetes však stále může komunikovat s Dockerem prostřednictvím kontejneru, který může být kompatibilní s CRI s pluginem.
Container Runtime Interface (CRI)
Přestože je Kubernetes platformou pro orchestraci kontejnerů, na nejnižší úrovni potřebuje také vytvářet a spravovat kontejnery. K dosažení tohoto cíle používá Kubernetes běhová prostředí kontejnerů.
Na začátku byl Docker Engine jediným dostupným runtimem na platformě. Popularita kontejnerizace však vyústila v konkurenční řešení a potřebu, aby je Kubernetes podporovala všechna. S Rozhraním Container Runtime může Kubernetes komunikovat se všemi hlavními runtimemi.
kontejner
containerd je runtime řešení vytvořené v Dockeru. Tento démon je k dispozici pro operační systémy Linux a Windows. V rámci projektu Docker spravuje kontejnerd přenos a ukládání obrázků, jakož i vytváření, spouštění a dohled nad kontejnery.
Kubernetes nepotřebuje k použití kontejneru celou platformu Docker. Díky pluginu pro kompatibilitu CRI mohou Kubernetes a kontejnery komunikovat přímo.
CRI-O
CRI-O je odlehčená implementace CRI kompatibilní s OCI. Byl vytvořen jako alternativa k Docker Engine.
S CRI-O můžete spustit moduly Kubernetes a stáhnout potřebné obrázky. Nejedná se však o runtime. Místo toho se používá ke spouštění jiných nízkoúrovňových runtime kompatibilních s OCI, jako je runC nebo Kata.
Open Container Initiative (OCI)
Docker a další významní aktéři z kontejnerového průmyslu založili iniciativu Open Container Initiative (OCI) v roce 2015. Cílem OCI je vytvořit standardy pro formáty kontejnerů a runtime. V současné době má OCI dvě specifikace:
- specifikace obrázku – specifikace obrázku, která popisuje, jak vytvořit obrázek kompatibilní s OCI.
- specifikace runtime - specifikace runtime pro rozbalení balíčku souborového systému.
runC
runC je univerzální kontejnerový runtime vytvořený Dockerem. Přestože je součástí sady nástrojů Docker, nevyžaduje ke spuštění platformu Docker.
Některé důležité funkce runC jsou:
- Plná podpora jmenných prostorů Linuxu.
- Nativní podpora funkcí zabezpečení systému Linux, jako je AppArmor, SELinux atd.
- Nativní podpora kontejnerů Windows 10.
- Kontejnery, které runC vytváří a spravuje, jsou kompatibilní s OCI.