Programování

Kontejnery 101: Základy Dockeru

Docker začínal v roce 2012 jako open source projekt, původně pojmenovaný dotcloud, k budování kontejnerů Linuxu pro jednu aplikaci. Od té doby se Docker stal nesmírně populárním vývojovým nástrojem, který se stále více používá jako běhové prostředí. Jen málo - pokud vůbec nějaké - technologie se u vývojářů uchytilo tak rychle jako Docker.

Jedním z důvodů, proč je Docker tak populární, je to, že splňuje příslib „rozvíjet se jednou, běžet kdekoli“. Docker nabízí jednoduchý způsob, jak zabalit aplikaci a její běhové závislosti do jednoho kontejneru; poskytuje také abstrakci za běhu, která umožňuje spuštění kontejneru napříč různými verzemi linuxového jádra.

Pomocí Dockeru může vývojář vytvořit kontejnerovou aplikaci na své pracovní stanici a pak snadno nasadit kontejner na jakýkoli server s povoleným Dockerem. Není nutné znovu testovat nebo přeladit kontejner pro prostředí serveru, ať už v cloudu nebo v prostorách.

Docker navíc poskytuje mechanismus sdílení a distribuce softwaru, který umožňuje vývojářům a provozním týmům snadno sdílet a znovu používat obsah kontejneru. Tento distribuční mechanismus spolu s přenositelností napříč stroji pomáhá zohlednit popularitu Dockeru u operačních týmů a vývojářů.

Komponenty Dockeru

Docker je vývojový nástroj i běhové prostředí. Abychom porozuměli Dockeru, musíme nejprve porozumět konceptu obrazu kontejneru Dockeru. Kontejner vždy začíná obrázkem a považuje se za instanci tohoto obrázku. Obrázek je statická specifikace toho, co by měl být kontejner za běhu, včetně kódu aplikace uvnitř kontejneru a nastavení konfigurace za běhu. Obrázky Dockeru obsahují vrstvy jen pro čtení, což znamená, že jakmile je obrázek vytvořen, nikdy se neupraví.

Obrázek 1 ukazuje příklad obrázku kontejneru. Tento obrázek zobrazuje obraz Ubuntu s instalací Apache. Obrázek je složen ze tří základních vrstev Ubuntu plus aktualizační vrstvy, na které je vrstva Apache a vlastní vrstva souborů.

Spuštěný kontejner Docker je instancí obrázku. Kontejnery odvozené od stejného obrázku jsou navzájem identické, pokud jde o jejich kód aplikace a závislosti běhového prostředí. Ale na rozdíl od obrázků, které jsou jen pro čtení, běžící kontejnery obsahují zapisovatelnou vrstvu (kontejnerovou vrstvu) v horní části obsahu jen pro čtení. Změny za běhu, včetně veškerých zápisů a aktualizací dat a souborů, se ukládají do kontejnerové vrstvy. Takže více souběžně spuštěných kontejnerů, které sdílejí stejný podkladový obrázek, může mít kontejnerové vrstvy, které se podstatně liší.

Když je spuštěný kontejner odstraněn, bude odstraněna také zapisovatelná kontejnerová vrstva a nebude přetrvávat. Jediným způsobem, jak přetrvávat změny, je provést explicitní docker commit příkaz před odstraněním kontejneru. Když uděláte docker commit„běžící obsah kontejneru, včetně zapisovatelné vrstvy, je zapsán do nového obrazu kontejneru a uložen na disk. To se stane novým obrázkem odlišným od obrázku, kterým byl kontejner vytvořen.

Pomocí tohoto výslovného docker commit příkaz, lze vytvořit postupnou, diskrétní sadu obrazů Docker, z nichž každý je postaven nad předchozí obrázek. Kromě toho Docker používá strategii kopírování při zápisu k minimalizaci stopy úložiště kontejnerů a obrázků, které sdílejí stejné základní komponenty. To pomáhá optimalizovat úložný prostor a minimalizovat čas zahájení kontejneru.

Obrázek 2 zobrazuje rozdíl mezi obrázkem a spuštěným kontejnerem. Všimněte si, že každý běžící kontejner může mít jinou zapisovatelnou vrstvu.

Kromě konceptu obrazu má Docker několik konkrétních komponent, které se liší od těch v tradičních linuxových kontejnerech.

  • Docker daemon. Démon Docker, známý také jako Docker Engine, je tenká vrstva mezi kontejnery a jádrem Linuxu. Démon Docker je trvalé běhové prostředí, které spravuje kontejnery aplikací. Libovolný kontejner Docker lze spustit na libovolném serveru, který má povolený Docker-daemon, bez ohledu na základní operační systém.
  • Dockerfile. Vývojáři používají Dockerfiles k vytváření bitových kopií kontejnerů, které se poté stávají základem spouštění kontejnerů. Dockerfile je textový dokument, který obsahuje všechny informace o konfiguraci a příkazy potřebné k sestavení image kontejneru. S Dockerfile může démon Docker automaticky vytvořit image kontejneru. Tento proces výrazně zjednodušuje kroky pro vytvoření kontejneru.

Přesněji řečeno, v Dockerfile nejprve určíte základní obraz, ze kterého začíná proces sestavení. Poté určíte posloupnost příkazů, po kterých lze vytvořit nový obrázek kontejneru.

  • Nástroje rozhraní příkazového řádku Docker. Docker poskytuje sadu příkazů CLI pro správu životního cyklu kontejnerů založených na obrázcích. Příkazy Dockeru pokrývají vývojové funkce, jako je sestavování, export a označování, a také běhové funkce, jako je běh, mazání, spouštění a zastavování kontejneru a další.

Můžete spouštět příkazy Dockeru proti konkrétnímu démonovi Dockeru nebo registru. Například pokud provedete docker -ps příkaz Docker vrátí seznam kontejnerů spuštěných na démonu.

Distribuce obsahu pomocí Dockeru

Kromě běhového prostředí a formátů kontejnerů poskytuje Docker mechanismus distribuce softwaru, běžně známý jako registr, který usnadňuje zjišťování a distribuci obsahu kontejneru.

Koncept registru je pro úspěch Dockeru zásadní, protože poskytuje sadu nástrojů pro zabalení, odeslání, uložení, objevení a opětovné použití obsahu kontejneru. Společnost Docker provozuje veřejný bezplatný registr s názvem Docker Hub.

  • Registr. Registr Dockeru je místo, kde jsou obrázky kontejnerů publikovány a uloženy. Registr může být vzdálený nebo místně. Může to být veřejné, takže jej může používat každý, nebo soukromé, omezené na organizaci nebo skupinu uživatelů. Registr Dockeru obsahuje sadu běžných rozhraní API, která uživatelům umožňují vytvářet, publikovat, vyhledávat, stahovat a spravovat obrázky kontejnerů.
  • Docker Hub. Docker Hub je veřejný cloudový registr kontejnerů spravovaný společností Docker. Docker Hub poskytuje podporu pro pracovní postupy zjišťování, distribuce a spolupráce obrázků. Kromě toho má Docker Hub sadu oficiálních obrázků, které jsou certifikovány společností Docker. Jedná se o obrázky od známých vydavatelů softwaru, jako jsou Canonical, Red Hat a MongoDB. Tyto oficiální obrázky můžete použít jako základ pro vytváření vlastních obrázků nebo aplikací.

Obrázek 3 zobrazuje pracovní postup, ve kterém uživatel vytvoří obrázek a nahraje jej do registru. Ostatní uživatelé mohou stáhnout obrázek z registru, aby vytvořili produkční kontejnery a nasadili je na hostitele Dockeru, ať jsou kdekoli.

Neměnnost kontejnerů Docker

Jednou z nejzajímavějších vlastností kontejnerů Docker je jejich neměnnost a výsledná bezstavovost kontejnerů.

Jak jsme popsali v předchozí části, image Dockeru se po vytvoření nezmění. Běžící kontejner odvozený z obrazu má zapisovatelnou vrstvu, která může dočasně ukládat změny běhového prostředí. Pokud je kontejner potvrzen před odstraněním pomocí docker commit, změny v zapisovatelné vrstvě budou uloženy do nového obrazu, který je odlišný od předchozího.

Proč je neměnnost dobrá? Neměnné obrázky a kontejnery vedou k neměnné infrastruktuře a neměnná infrastruktura má mnoho zajímavých výhod, které u tradičních systémů nelze dosáhnout. Mezi tyto výhody patří:

  • Řízení verzí. Vyžadováním explicitních revizí, které generují nové obrázky, vás Docker nutí provádět správu verzí. Můžete sledovat po sobě jdoucí verze obrázku; vrácení zpět na předchozí obrázek (tedy na předchozí komponentu systému) je zcela možné, protože předchozí obrázky jsou uchovávány a nikdy upravovány.
  • Čistší aktualizace a lépe zvládnutelné změny stavu. Díky neměnné infrastruktuře již nemusíte upgradovat serverovou infrastrukturu, což znamená, že není třeba měnit konfigurační soubory, žádné aktualizace softwaru, žádné aktualizace operačního systému atd. Pokud jsou nutné změny, jednoduše vytvoříte nové kontejnery a vytlačíte je, abyste nahradili staré. Jedná se o mnohem diskrétnější a zvládnutelnější metodu pro změnu stavu.
  • Minimalizovaný drift. Abyste se vyhnuli posunu, můžete pravidelně a proaktivně aktualizovat všechny komponenty ve vašem systému, abyste se ujistili, že jsou nejnovějšími verzemi. Tato praxe je mnohem jednodušší u kontejnerů, které zapouzdřují menší součásti systému, než u tradičního, objemného softwaru.

Rozdíl v Dockeru

Formát obrazu Dockeru, rozsáhlá rozhraní API pro správu kontejnerů a inovativní mechanismus distribuce softwaru z něj učinily oblíbenou platformu pro vývojové i provozní týmy. Docker přináší organizaci tyto významné výhody.

  • Minimální, deklarativní systémy. Kontejnery Docker jsou v nejlepším případě, pokud se jedná o malé jednoúčelové aplikace. To dává vzniknout kontejnerům, které mají minimální velikost a které zase podporují rychlé dodání, nepřetržitou integraci a nepřetržité nasazení.
  • Předvídatelné operace. Největší bolestí v systémových operacích vždy bylo zdánlivě náhodné chování infrastruktury nebo aplikací. Tím, že vás Docker nutí provádět menší a spravovatelnější aktualizace, a poskytnutím mechanismu k minimalizaci driftu systému, vám Docker pomáhá vytvářet předvídatelnější systémy. Když se drift eliminuje, máte jistotu, že se software bude chovat vždy stejným způsobem, bez ohledu na to, kolikrát jej nasadíte.
  • Rozsáhlé opětovné použití softwaru. Kontejnery Docker znovu používají vrstvy z jiných obrázků, což přirozeně podporuje opětovné použití softwaru. Sdílení obrázků Dockeru prostřednictvím registrů je dalším skvělým příkladem opětovného použití komponent ve velkém měřítku.
  • Skutečná přenositelnost ve více cloudech. Docker umožňuje skutečnou nezávislost na platformě tím, že umožňuje kontejnerům volně migrovat mezi různými cloudovými platformami, místní infrastrukturou a vývojovými pracovními stanicemi.

Docker již mění způsob, jakým organizace budují systémy a poskytují služby. Začíná to přetvářet způsob, jakým přemýšlíme o designu softwaru a ekonomice dodávek softwaru. Než se tyto změny skutečně zakoření, musí organizace lépe pochopit, jak spravovat zabezpečení a zásady pro prostředí Docker. Ale to je téma pro další článek.

Chenxi Wang je hlavní strategickou ředitelkou firmy zabývající se bezpečností kontejnerů Twistlock.

Nové technologické fórum poskytuje místo, kde můžete prozkoumat a diskutovat o nově vznikajících podnikových technologiích v nebývalé hloubce a šíři. Výběr je subjektivní, založený na našem výběru technologií, které považujeme za důležité a pro čtenáře nejzajímavější. nepřijímá marketingové materiály ke zveřejnění a vyhrazuje si právo upravovat veškerý přispěný obsah. Všechny dotazy zasílejte na [email protected].

$config[zx-auto] not found$config[zx-overlay] not found