Proč jsou kontejnery důležité?
- 7 min
V této lekci budete sledovat tým Tailspin, který se zabývá některými potřebnými vylepšeními procesu DevOps. V tomto scénáři tým pomocí Dockeru kontejnerizuje svou webovou aplikaci. Tým pak aktualizuje svůj CI/CD proces, aby ho podporoval.
Bylo to zhruba několik týdnů.
Posledních pár týdnů bylo v Tailspinu náročné. Týmy mají problémy splnit termíny z mnoha důvodů a v celé společnosti panuje obava ohledně produktivity. Andy svolal některé klíčové zúčastněné strany z týmu webových stránek Space Game, aby shromáždili zpětnou vazbu pro nadcházející prezentaci vedení.
Ondra: Děkujeme za zastavení. Vím, že posledních pár týdnů byly pro každého drsné, ale mám dobrou zprávu. Vedení zítra pořádá akci mimo pracoviště, aby vyslechlo návrhy na změny, které můžeme udělat za účelem zlepšení výkonu. Pozvali mě, abych představil případovou studii o našich úspěších v DevOps a řekli, že jsou také otevřeni jakýmkoli dalším nápadům, které bychom mohli mít. Doufal jsem, že bychom mohli tuto schůzku použít jako příležitost pro debatu. Kdo chce jít jako první?
Všichni se dívají na Amitu. V poslední době byla zvlášť frustrovaná.
Amita: Jdu nejdřív. Jak víte, testuji pro více týmů a může to být náročné, protože každý tým používá svou vlastní technologickou sadu. I když používají stejné základní platformy, jako je .NET nebo Java, často cílí na různé verze. Mám pocit, že někdy strávím polovinu dne tím, že testovací prostředí nastavím do stavu, ve kterém mohou spustit kód, který potřebuji otestovat. Když něco nefunguje, je těžké zjistit, jestli kód obsahuje chybu nebo jestli jsem omylem nakonfiguroval verzi 4.2.3 místo verze 4.3.2.
Andy píše na tabuli "Výzvy verzování závislostí pro kontrolu kvality".
Tim: Chtěl bych k této frustraci přidat operace. Máme několik týmů s jedinečnými požadavky na verzi, takže musíme publikovat své aplikace na vlastních virtuálních počítačích, abychom zajistili, že jejich verze a požadavky na komponenty nebudou v konfliktu s ostatními aplikacemi. Kromě režie spojené s údržbou dodatečné sady virtuálních počítačů nás také stojí více, než kdyby tyto aplikace mohly běžet vedle sebe.
Andy píše na tabuli režijní náklady kvůli řešení izolace aplikací pomocí virtuálních počítačů.
Mara: Mám něco ohledně vývoje. Před několika týdny jsem pracoval na aktualizačním systému peer-to-peer a měl jsem to všechno na svém počítači, ale když jsem ho předal pro nasazení, nefunguje v produkčním prostředí. Zapomněla jsem, že jsem potřebovala otevřít port 315 jako součást služby. Trvalo nám to více než den během odstraňování potíží, abychom si uvědomili, co se děje. Jakmile jsme to otevřeli v produkčním prostředí, fungovalo to podle očekávání.
Andy na tabuli zapíše „Nekonzistence konfigurace mezi fázemi nasazení“.
Ondra: Myslím, že tato konverzace je dobrý začátek. Pojďme se na tyto problémy podívat a zjistit, s čím můžu přijít. Tady jsou obavy, které jsem slyšel:
- Výzvy týkající se správy verzí závislostí pro kontrolu kvality
- Režie způsobená řešením izolace aplikací s využitím virtuálních počítačů
- Nekonzistence konfigurace mezi fázemi nasazení
Seskupování všeho do jednoho kontejneru
Příští ráno Andy zavolá na schůzku, aby týmu představil nový nápad.
Ondra: Mluvil jsem s kolegy včera o výzev, kterým čelíme, a udělali zajímavé návrhy. Ten, který jsem rád vyzkoušet, je Docker. Jedná se o technologii pro balení celých aplikací jako kontejnerů.
Amita: Co je kontejner? Je to jako .zip soubor?
Ondra: Ne přesně. Jedná se spíše o jednoduchý virtuální počítač navržený tak, aby běžel přímo v hostitelském operačním systému. Při sestavování projektu je výstup kontejnerem, který zahrnuje váš software a jeho závislosti. Nejedná se ale o kompletní virtualizovaný systém, takže se může spustit za méně než jednu sekundu.
Tim: Jak zajišťuje zabezpečení a izolaci?
Ondra: Zabezpečení a izolace se zpracovávají hostitelským operačním systémem. Když kontejner běží v hostitelském procesu, je kontejner izolovaný od ostatních procesů na stejném hostitelském počítači. Tato izolace umožňuje kontejneru načíst libovolné verze komponent, které potřebuje, bez ohledu na to, co dělají jiné kontejnery. Také to znamená, že na stejném hostiteli můžete snadno spustit více kontejnerů současně.
Amita: To zní skvěle pro produkční prostředí, ale řeší problémy, kterým čelíme na dřívějších stupních v procesu?
Ondra: Naprosto! Místo odeslání zdrojového kódu nebo sady binárních souborů se celý kontejner stane artefaktem. To znamená, že když Mara vyvíjí, spustí se ladicí relace místně proti kontejneru hostovaným na svém počítači. Když Amita testuje, testuje kopii stejného kontejneru, která už zahrnuje všechny požadované verze jejích závislostí. Když Tim spravuje naše produkční prostředí, kontejnery, které monitoruje, jsou samostatné kopie stejných kontejnerů vyvinutých Mara a otestované Amitou.
Mara: Jak těžké je vyvíjet kontejnerovou aplikaci? Musíme v našem stávajícím kódu provádět významné změny?
Ondra: Kontejnery jsou spíše technologií balení a nasazení. Nemají vliv na základní software, který píšeme. Můžeme jen instruovat naše nástroje, aby na konci sestavení vytvořily kontejner Dockeru. Nejprve, když ladíme, aplikace běží z toho místního kontejneru místo našeho místního webového serveru. Nástroje jako Visual Studio dokonce umožňují přepínat mezi ladicími prostředími, jako je Docker a IIS Express, abychom získali flexibilitu, kterou potřebujeme. Včera večer jsem forkul projekt našeho webu a převedl ho do kontejneru Docker, abych otestoval proces. Potřeboval jsem přidat jenom základní konfiguraci kontejneru; Nepotřeboval jsem změnit žádný z našich existujících kódů.
Mara: To je skvělé vědět. Vsadím se, že můžeme dokonce aktualizovat vydávací kanál v Azure Pipelines z vaší odnože, abychom sestavili a nasadili Docker verzi.
Ondra: Čteš mi myšlenky.
Co je Docker?
Docker je technologie pro automatizaci balení a nasazení přenosných, samoobslužných kontejnerů. Kontejnery Dockeru se můžou spouštět kdekoli, kde se najde hostitel Dockeru, ať už na vývojovém počítači, na serveru oddělení, v podnikovém datacentru nebo v cloudu. Azure nabízí několik způsobů spouštění kontejnerových aplikací, včetně služby App Service nebo jako součást clusterů spravovaných pomocí technologií orchestrace, jako je Kubernetes.
Tým Tailspin pro tento scénář vybral kontejnery Dockeru, protože splňoval všechny své potřeby:
Problémy se správou verzí závislostí pro kontrolu kvality: Aplikace jsou zabalené jako kontejnery, které s sebou přinášejí správné verze jejich závislostí.
Náklady na řešení izolace aplikací pomocí virtuálních počítačů: Mnoho izolovaných kontejnerů může běžet na stejném serveru, s výhodami oproti virtuálním počítačům, včetně rychlejšího času spuštění a vyšší efektivity využití prostředků.
Nekonzistence konfigurace mezi fázemi DevOps: Kontejnery se dodávají s manifesty, které automatizují požadavky na konfiguraci, například které porty je potřeba zpřístupnit.
Přijetí kontejnerů Dockeru může být klíčovým krokem k architektuře mikroslužeb. O tom se budeme podrobněji zabývat později.