Programování

Co je Docker? Jiskra revoluce v kontejneru

Docker je softwarová platforma pro vytváření aplikací založených na kontejnery - malá a lehká prováděcí prostředí, která využívají sdílené jádro operačního systému, ale jinak fungují navzájem izolovaně. Zatímco kontejnery jako koncept existují již nějakou dobu, Docker, projekt open source zahájený v roce 2013, pomohl popularizovat technologii a pomohl řídit trend směrem k kontejnerizace a mikroslužby ve vývoji softwaru, který se stal známým jako cloudový nativní vývoj.

Co jsou kontejnery?

Jedním z cílů vývoje moderního softwaru je udržovat aplikace na stejném hostiteli nebo klastru navzájem izolované, aby si navzájem nepřiměřeně nezasahovaly do provozu nebo údržby. To může být obtížné díky balíčkům, knihovnám a dalším softwarovým komponentám potřebným pro jejich spuštění. Jedno řešení tohoto problému bylo virtuální stroje, které udržují aplikace na stejném hardwaru zcela oddělené a na minimum omezují konflikty mezi softwarovými komponentami a konkurenci o hardwarové prostředky. Ale virtuální stroje jsou objemné - každý vyžaduje svůj vlastní operační systém, takže má obvykle velikost gigabajtů - a je obtížné je udržovat a upgradovat.

Kontejnery, naopak, izolovat prostředí pro provádění aplikací od sebe navzájem, ale sdílet základní jádro OS. Obvykle se měří v megabajtech, používají mnohem méně zdrojů než virtuální počítače a spouštějí se téměř okamžitě. Mohou být zabaleny mnohem hustěji na stejný hardware a otáčet se nahoru a dolů hromadně s mnohem menším úsilím a režií. Kontejnery poskytují vysoce efektivní a vysoce granulární mechanismus pro kombinování softwarových komponent do druhů aplikací a zásobníků služeb potřebných v moderním podniku a pro udržování těchto softwarových komponent aktualizovaných a udržovaných.

Přístavní dělník

Co je Docker?

Docker je projekt s otevřeným zdrojovým kódem, který usnadňuje vytváření kontejnerů a aplikací založených na kontejnerech. Docker, původně vytvořený pro Linux, nyní běží také na Windows a MacOS. Abychom pochopili, jak Docker funguje, pojďme se podívat na některé komponenty, které byste použili k vytvoření aplikací v kontejneru Docker.

Dockerfile

Každý kontejner Dockeru začíná na Dockerfile. Dockerfile je textový soubor napsaný ve snadno srozumitelné syntaxi, který obsahuje pokyny k sestavení Dockeru obraz (více o tom za chvíli). Dockerfile specifikuje operační systém, který bude základem kontejneru, spolu s jazyky, proměnnými prostředí, umístění souborů, síťovými porty a dalšími komponentami, které potřebuje - a samozřejmě, co bude kontejner ve skutečnosti dělat, jakmile jej spustíme.

Paige Niedringhaus na ITNext má dobré rozdělení syntaxe souboru Dockerfile.

Docker obrázek

Jakmile máte svůj Dockerfile napsaný, vyvoláte Docker stavět nástroj pro vytvoření obraz na základě toho Dockerfile. Zatímco Dockerfile je sada instrukcí, které vám řeknou stavět jak udělat obrázek, Docker image je přenosný soubor obsahující specifikace, pro které softwarové komponenty bude kontejner spuštěn a jak. Protože soubor Dockerfile pravděpodobně bude obsahovat pokyny k získání některých softwarových balíčků z online úložišť, měli byste se postarat o výslovné určení správných verzí, jinak by soubor Dockerfile mohl vytvářet nekonzistentní obrázky v závislosti na tom, kdy je vyvolán. Jakmile je však obrázek vytvořen, je statický. Codefresh nabízí pohled na to, jak vytvořit obrázek podrobněji.

Docker běží

Docker běh obslužný program je příkaz, který skutečně spustí kontejner. Každý kontejner je instance obrázku. Kontejnery jsou navrženy tak, aby byly přechodné a dočasné, ale lze je zastavit a restartovat, čímž se kontejner spustí do stejného stavu, v jakém byl zastaven. Dále lze současně spustit více instancí kontejneru se stejným obrázkem (pokud má každý kontejner jedinečný název). Kontrola kódu obsahuje velké rozdělení různých možností pro běh příkaz, abyste získali představu o tom, jak to funguje.

Docker Hub

I když je vytváření kontejnerů snadné, nenechte se unést myšlenkou, že budete muset každý ze svých obrázků vytvořit úplně od začátku. Docker Hub je úložiště SaaS pro sdílení a správu kontejnerů, kde najdete oficiální obrázky Dockeru od open-source projektů a prodejců softwaru a neoficiální obrázky od široké veřejnosti. Můžete si stáhnout obrázky kontejnerů obsahující užitečný kód, nebo nahrát vlastní, sdílet je otevřeně nebo je místo toho nastavit jako soukromé. Pokud chcete, můžete také vytvořit místní registr Docker. (Docker Hub měl v minulosti problémy s obrázky, které byly nahrány se zabudovanými zadními vrátky.)

Docker Engine

Docker Engine je jádrem Dockeru, základní technologie klient-server, která vytváří a provozuje kontejnery. Obecně řečeno, když někdo říká Přístavní dělník obecně a nemluví o společnosti nebo o celkovém projektu, znamenají Docker Engine. V nabídce jsou dvě různé verze Docker Engine: Docker Engine Enterprise a Docker Engine Community.

Komunitní vydání Dockeru

Docker vydal své Enterprise Edition v roce 2017, ale její původní nabídka, přejmenovaná na Docker Community Edition, zůstává otevřeným zdrojem a zdarma a neztratila v procesu žádné funkce. Místo toho Enterprise Edition, která stojí 1 500 $ za uzel za rok, přidala pokročilé funkce pro správu, včetně ovládacích prvků pro správu klastrů a obrazů a monitorování zranitelnosti. Blog BoxBoat obsahuje přehled rozdílů mezi edicemi.

Jak Docker dobyl svět kontejnerů

Myšlenka, že daný proces lze spustit s určitým stupněm izolace od zbytku jeho provozního prostředí, byla zabudována do operačních systémů Unix, jako jsou BSD a Solaris, po celá desetiletí. Původní technologie kontejneru Linux, LXC, je virtualizační metoda na úrovni OS pro běh více izolovaných systémů Linux na jednom hostiteli. LXC bylo možné díky dvěma funkcím Linuxu: jmenné prostory, které obalují sadu systémových prostředků a prezentují je procesu, aby vypadal, jako by byly vyhrazeny tomuto procesu; a skupiny, které určují izolaci a využití systémových prostředků, jako jsou CPU a paměť, pro skupinu procesů.

Kontejnery oddělují aplikace od operačních systémů, což znamená, že uživatelé mohou mít čistý a minimální operační systém Linux a vše ostatní spouštět v jednom nebo více izolovaných kontejnerech. A protože je operační systém odebrán z kontejnerů, můžete kontejner přesunout na libovolný server Linux, který podporuje běhové prostředí kontejneru.

Docker představil několik významných změn v LXC, díky nimž jsou kontejnery přenosnější a flexibilnější k použití. Pomocí kontejnerů Docker můžete nasadit, replikovat, přesouvat a zálohovat pracovní zátěž ještě rychleji a snadněji než pomocí virtuálních strojů. Docker přináší cloudovou flexibilitu do jakékoli infrastruktury schopné provozovat kontejnery. Nástroje Docker's image image byly také pokrokem oproti LXC, což vývojáři umožňovalo vytvářet knihovny obrázků, skládat aplikace z více obrázků a spouštět tyto kontejnery a aplikace na místní nebo vzdálené infrastruktuře.

Docker Compose, Docker Swarm a Kubernetes

Docker také usnadňuje koordinaci chování mezi kontejnery, a tedy vytvářet zásobníky aplikací spojením kontejnerů dohromady. Docker Compose vytvořil Docker, aby zjednodušil proces vývoje a testování vícekontejnerových aplikací. Jedná se o nástroj příkazového řádku, připomínající klienta Dockeru, který využívá speciálně naformátovaný soubor deskriptoru pro sestavení aplikací z více kontejnerů a jejich společné spuštění na jednom hostiteli. (Další informace najdete v tutoriálu Docker Compose.)

Pokročilejší verze těchto chování - jak se tomu říká orchestrace kontejneru—Jsou nabízeny jinými produkty, například Docker Swarm a Kubernetes. Ale Docker poskytuje základy. Přestože Swarm vyrostl z projektu Docker, Kubernetes se stal de facto Orchestrační platforma Docker dle výběru.

Výhody Dockeru

Kontejnery Docker poskytují způsob, jak budovat podnikové a podnikové aplikace, které se snadněji sestavují, udržují a pohybují než jejich konvenční protějšky. 

Kontejnery Docker umožňují izolaci a škrcení

Kontejnery Docker udržují aplikace izolované nejen od sebe navzájem, ale i od základního systému. To nejen zajišťuje čistší softwarový zásobník, ale také usnadňuje diktování toho, jak daná kontejnerizovaná aplikace využívá systémové prostředky - CPU, GPU, paměť, I / O, sítě atd. Rovněž usnadňuje zajištění odděleného uchovávání dat a kódu. (Viz „Kontejnery Docker jsou bez státní příslušnosti a neměnné,“ níže.)

Kontejnery Docker umožňují přenositelnost

Kontejner Docker běží na jakémkoli počítači, který podporuje běhové prostředí kontejneru. Aplikace nemusí být svázány s hostitelským operačním systémem, takže prostředí aplikace i základní operační prostředí lze udržovat čisté a minimální.

Například kontejner MySQL pro Linux poběží na většině systémů Linux, které kontejnery podporují. Všechny závislosti pro aplikaci se obvykle dodávají ve stejném kontejneru.

Kontejnerové aplikace lze snadno přesouvat z místních systémů do cloudových prostředí nebo z notebooků vývojářů na servery, pokud cílový systém podporuje Docker a jakýkoli z nástrojů třetích stran, které by s ním mohly být použity, například Kubernetes (viz „Kontejnery Dockeru usnadňují orchestraci a škálování“ níže).

Za normálních okolností musí být obrázky kontejneru Docker vytvořeny pro konkrétní platformu. Například kontejner Windows nebude fungovat na Linuxu a naopak. Dříve bylo jedním z těchto omezení omezení spuštění virtuálního počítače, na kterém byla spuštěna instance potřebného operačního systému, a spuštění kontejneru ve virtuálním počítači.

Tým Docker však od té doby vymyslel elegantnější řešení s názvemprojevuje, které umožňují zabalení obrázků pro více operačních systémů vedle sebe do stejného obrazu. Manifesty jsou stále považovány za experimentální, ale naznačují, jak by se kontejnery mohly stát aplikačním řešením pro různé platformy i řešením pro různé prostředí. 

Kontejnery Docker umožňují skládatelnost

Většina podnikových aplikací se skládá z několika samostatných komponent uspořádaných do stohu - webový server, databáze, mezipaměť v paměti. Kontejnery umožňují sestavit tyto kousky do funkční jednotky se snadno vyměnitelnými částmi. Každý kus je poskytován jiným kontejnerem a lze jej udržovat, aktualizovat, vyměňovat a upravovat nezávisle na ostatních.

Jedná se v podstatě o model mikroslužeb designu aplikací. Rozdělením funkčnosti aplikace na samostatné samostatné služby nabízí model mikroslužeb protijed na zpomalení tradičních vývojových procesů a nepružných monolitických aplikací. Lehké a přenosné kontejnery usnadňují vytváření a údržbu aplikací založených na mikroslužbách.

Kontejnery Docker usnadňují orchestraci a škálování

Vzhledem k tomu, že kontejnery jsou lehké a ukládají malou režii, je možné v daném systému spustit mnohem více z nich. Kontejnery však lze také použít k škálování aplikace napříč klastry systémů a ke zvyšování nebo snižování služeb, aby splňovaly prudký nárůst poptávky nebo šetřily zdroje.

Nejvíce podnikové verze nástrojů pro nasazení, správu a škálování kontejnerů jsou poskytovány prostřednictvím projektů třetích stran. Hlavním z nich je Kubernetes společnosti Google, systém pro automatizaci způsobu nasazení a škálování kontejnerů, ale také toho, jak jsou navzájem propojeny, vyváženy a spravovány. Kubernetes také poskytuje způsoby, jak vytvářet a opakovaně používat definice aplikací s více kontejnery nebo „Helmovy grafy“, aby bylo možné sestavovat a spravovat složité zásobníky aplikací na vyžádání.

Docker také obsahuje vlastní vestavěný orchestrační systém, režim Swarm, který se stále používá pro méně náročné případy. To znamená, že Kubernetes se stal něco jako výchozí volba; ve skutečnosti je Kubernetes dodáván s Docker Enterprise Edition.

Docker varuje

Kontejnery řeší mnoho problémů, ale neléčí vše. Některé z jejich nedostatků jsou záměrné, zatímco jiné jsou vedlejšími produkty jejich designu.

Kontejnery Docker nejsou virtuální stroje

Nejběžnější koncepční chybou, kterou lidé dělají s kontejnery, je jejich přirovnání k virtuálním strojům. Protože však kontejnery a virtuální stroje používají různé izolační mechanismy, mají zřetelně odlišné výhody a nevýhody.

Virtuální stroje poskytují vysoký stupeň izolace procesů, protože běží ve vlastní instanci operačního systému. Tento operační systém nemusí být stejný jako ten, který běží na hostiteli. Virtuální stroj Windows může běžet na hypervizoru Linuxu a naopak.

Kontejnery naopak používají kontrolované části prostředků hostitelského operačního systému; mnoho aplikací sdílí stejné jádro OS, a to vysoce spravovaným způsobem. Výsledkem je, že kontejnerové aplikace nejsou tak důkladně izolované jako virtuální stroje, ale poskytují dostatečnou izolaci pro drtivou většinu pracovních zátěží.

Kontejnery Docker neposkytují rychlost holého kovu