Proč jsou kontejnery důležité?

Dokončeno

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 kanál CI/CD, aby ho podporoval.

Bylo to pár hrubých týdnů.

Posledních pár týdnů bylo v Tailspinu náročné. Týmy se snaží splnit termíny z řady důvodů a jejich produktivita v celé společnosti má obavy. Andy volal některé klíčové zúčastněné strany z týmu webu Space Game společně, aby shromáždil zpětnou vazbu pro nadcházející prezentaci pro správu.

Andy: Děkuji 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 drží mimo pracoviště, aby si poslechla návrhy změn, které můžeme udělat za účelem zlepšení výkonu. Pozvali mě, abych představil případovou studii o našich úspěšných devOps a řekla, že jsou také otevřené pro všechny další nápady, 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ívá 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á svůj vlastní technologický zásobník. I když používají stejné základní platformy, jako je .NET nebo Java, často cílí na různé verze. Cítím se, že někdy strávím polovinu svého dne jednoduše získáním testovacích prostředí ve stavu, kde můžou 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 týkající se správy verzí závislostí pro kontrolu kvality.

Tim: Rád bych do té frustrace přidal 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 z vývojové strany. Před několika týdny jsem pracoval na aktualizačním systému peer-to-peer a měl jsem všechno na svém počítači. Ale když jsem ho předal za nasazení, nefungovalo v produkčním prostředí. Zapomněl jsem, že jsem potřeboval otevřít port 315 jako součást služby. Trvalo nám to celý den řešení potíží, abychom si uvědomili, co se děje. Jakmile to otevřeme v produkčním prostředí, fungovalo to podle očekávání.

Andy na tabuli zapíše nekonzistence konfigurace mezi fázemi nasazení.

Andy: 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šech (v jednom kontejneru)

Příští ráno Andy zavolá na schůzku, aby týmu představil nový nápad.

Andy: Včera jsem mluvil s kolegy o výzvách, 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 soubor .zip ?

Andy: 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 zpracovává zabezpečení a izolaci?

Andy: Zabezpečení a izolace se zpracovává 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 dříve v kanálu?

Andy: 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?

Andy: 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. Když pak ladíme, aplikace místo místního webového serveru vyčerpá tento místní kontejner. 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 rozvětvoval projekt našeho webu a převeděl jsem ho na sestavení jako kontejner Dockeru pro otestování procesu. 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 kanál verze v Azure Pipelines dokonce aktualizovat z vašeho forku a sestavit a nasadit verzi Dockeru.

Andy: Četl jsi mou mysl.

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í.

  • Režie způsobená řešením izolace aplikací pomocí virtuálních počítačů: Mnoho izolovaných kontejnerů může běžet na stejném hostiteli s výhodami oproti virtuálním počítačům, včetně rychlejší doby spouštění, aby se vyšší efektivita 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.

Prověřte si své znalosti

1.

Která z následujících možností není dobrým důvodem pro použití Dockeru?

2.

Jak jsou kontejnery a virtuální počítače podobné?

3.

Kolik režie vyžaduje migrace existující aplikace .NET Core na použití kontejneru Dockeru?