Co je kontejner?
Standardizované a přenositelné balíčky aplikací.
Vysvětlení kontejnerů
Stejně jako se v odvětví dopravy používají fyzické kontejnery k oddělení různých nákladů například na lodích nebo ve vlacích, i technologie pro vývoj softwaru čím dál víc využívají přístup označovaný jako kontejnerizace.
Standardní balíček softwaru, označovaný jako kontejner, seskupuje kód aplikace a související konfigurační soubory, knihovny a závislosti potřebné ke spuštění aplikace. Díky tomu můžou vývojáři a odborníci na IT bezproblémově nasazovat aplikace napříč prostředími.
Proč by vás měly zajímat kontejnery
Problém, kdy aplikaci po přesunu z jednoho prostředí do jiného není možné správně spustit, je stejně starý jako samotný vývoj softwaru. K takovým problémům obvykle dochází kvůli rozdílům v konfiguraci základních požadovaných knihoven a dalších závislostí.
Kontejnery tento problém řeší tím, že poskytují jednoduchou neměnnou infrastrukturu pro balení a nasazování aplikací. Aplikace nebo služba se společně se svými závislostmi a konfigurací zabalí do image kontejneru. Kontejnerizovanou aplikaci je možné testovat jako jednotku a nasadit jako instanci image kontejneru do hostitelského operačního systému.
Kontejnery tak umožňují vývojářům a odborníkům na IT nasazovat aplikace napříč prostředími s minimálními nebo žádnými úpravami.
Seznamte se blíže se vznikem a krásou kontejnerů.
Porovnání kontejnerů a virtuálních počítačů
Když lidé přemýšlí o virtualizaci, často se jim vybaví virtuální počítače. Virtualizace ve skutečnosti může mít mnoho podob a jednou z nich jsou kontejnery. Jaký je tedy rozdíl mezi virtuálními počítači a kontejnery?
Virtuální počítače na vysoké úrovni virtualizují základní hardware, aby na něm mohlo běžet více instancí operačního systému. Na každém virtuálním počítači běží operační systém a každý z nich má přístup k virtualizovaným prostředkům, které představují základní hardware.
Virtuální počítače mají řadu výhod. Patří mezi ně možnost provozu různých operačních systémů na jednom serveru, efektivnější a nákladově efektivní využití fyzických prostředků nebo rychlejší zřizování serverů. Na druhou stranu, každý virtuální počítač obsahuje image operačního systému, knihovny, aplikace a další prostředky, a proto může být poměrně velký.
Kontejner virtualizuje základní operační systém a zajišťuje, aby kontejnerizovaná aplikace zdánlivě měla operační systém celý pro sebe, včetně procesoru, paměti, úložiště souborů a síťových připojení. Vzhledem k tomu, že jsou rozdíly v základním operačním systému a základní infrastruktuře abstrahované, kontejner je možné nasadit a spustit kdekoli, pokud je základní image konzistentní. Pro vývojáře je to neuvěřitelně zajímavé.
Vzhledem k tomu, že kontejnery sdílí hostitelský operační systém, nemusí spouštět operační systém ani načítat knihovny. Díky tomu můžou být kontejnery mnohem efektivnější a jednodušší. Kontejnerizované aplikace je možné spustit během několika sekund a počítače můžou obsahovat mnohem více instancí aplikací než ve scénářích s virtuálními počítači. Další výhodou přístupu se sdíleným operačním systémem je snížení režie související s údržbou, jako jsou opravy nebo aktualizace.
Přestože jsou kontejnery přenositelné, jsou vázané na operační systém, pro který jsou definované. Například kontejner pro Linux není možné spustit ve Windows a naopak.
Proč kontejnery
Agilita
Vývojáři můžou snížit celkové množství vynaloženého úsilí spojeného s nasazováním aplikací a zjednodušit celý cyklus vývoje a testování tím, že budou sestavovat aplikace a balit je do kontejnerů, které poskytnout IT oddělení, které je pak může spouštět na standardizované platformě. Tím se také zlepší spolupráce mezi vývojovými a provozními týmy a zvýší se jejich efektivita, aby mohli rychleji dodávat aplikace.
Přenositelnost
Kontejnery poskytují standardizovaný formát pro balení a uchovávání všech komponent potřebných ke spuštění požadované aplikace. Tím se řeší typický problém typu „Na mém počítači to přece funguje“ a zajišťuje přenositelnost mezi platformami operačních systémů a cloudy. Ať už se kontejner nasadí kdekoli, vždy se spouští v konzistentním prostředí, které se mezi nasazeními nemění. Teď máte konzistentní formát od vývoje až po produkční prostředí.
Rychlá škálovatelnost
Vzhledem k tomu, že se s kontejnery nepojí režie typická pro virtuální počítače, včetně samostatných instancí operačních systémů, dokáže jedna infrastruktura zajistit podporu mnohem většího počtu kontejnerů. Díky odlehčené povaze kontejnerů je možné je rychle spouštět a zastavovat a díky tomu je možné je využívat ve scénářích rychlého vertikálního navyšování a snižování kapacity.
Případy použití
Aplikace nativní pro cloud
Aplikace nativní pro cloud se spoléhají na kontejnery, které poskytují společný provozní model napříč prostředími, a to včetně veřejných, privátních a hybridních prostředí. Díky nízké režii a vysoké hustotě kontejnerů je možné hostovat velké množství kontejnerů na jednom virtuálním počítači, a proto jsou kontejnery ideální pro doručování aplikací nativních pro cloud.
Migrace metodou „lift and shift“
Organizace můžou migrací do cloudu získat značné výhody, ale pravděpodobně nebudou chtít přepisovat stávající aplikace. S využitím kontejnerů můžete potenciálně migrovat aplikace do cloudu beze změny kódu.
Batch – dávkové zpracování
Dávkové zpracování označuje aktivity, které je možné provádět bez zásahu člověka nebo v závislosti na dostupnosti prostředků. Mezi příklady patří generování sestav, změna velikosti obrázků nebo převod souborů z jednoho formátu do jiného. Kontejnery nabízí jednoduchý způsob, jak spouštět dávkové úlohy bez nutnosti spravovat prostředí a závislosti. S využitím možností dynamického výpočetního prostředí, jako je služba Azure Container Instances (ACI), je možné efektivně ingestovat zdrojová data, zpracovávat je a ukládat je do odolného úložiště, jako je služba Azure Blob Storage. Tento přístup může oproti staticky zřizovaným virtuálním počítačům přinést výrazné úspory nákladů při účtování po sekundách.
Strojové učení
Strojové učení používá na datech algoritmy a vytváří predikce na základě vzorů zjištěných v datech. Díky kontejnerům můžou být aplikace strojového učení samostatné a snadno škálovatelné v jakémkoli prostředí.
Víc než jen kontejnery
Orchestrace
Spouštění kontejnerů ve velkém měřítku vyžaduje orchestraci a správu distribuovaných kontejnerizovaných aplikací prostřednictvím nějaké platformy pro orchestraci, jako je například Kubernetes.
Zabezpečení
Zabezpečení kontejnerů vyžaduje vrstvený přístup, od zabezpečení image kontejneru až po izolaci clusteru. Konfigurace těchto ochranných mantinelů se nejlépe nastavuje pomocí kanálů CI/CD.
Bezserverové kontejnery
S využitím kontejnerů na vyžádání můžete dále zvýšit flexibilitu. Technologie bezserverových kontejnerů umožňují snadno spouštět kontejnery bez nutnosti spravovat servery a zajišťují rozšiřování z clusteru Kubernetes, když provoz přichází ve vlnách.
DevOps
Kontejnery umožňují vývojářům snadno sdílet software a závislosti napříč IT a produkčními prostředími. V kombinaci s postupy DevOps můžete zefektivnit a zrychlit dodávání kódu a zkrátit cykly vývoje softwaru.