Docker, Kubernetes a kontejnery. Jak fungují a proč je chtít

Kontejnerizace je v posledních letech hitem a zájem o technologii roste i mimo IT prostředí. Zjistěte, jak kontejnery fungují a jaké výhody vám mohou přinést.

Kontejnerizace aplikaci se podobá klasickým lodním kontejnerům.
MICHAELA GRYGAŘÍKOVÁ
  • MICHAELA GRYGAŘÍKOVÁ

  • 14. 08. 2019
  • 9 min čtení
Zkopirovat do schránky

Proč se o kontejnerech pořád tolik mluví? Zjednodušeně řečeno – kontejnery vyřešily některé nedostatky klasické virtualizace. Především snížily režijní náklady, usnadnily portabilitu softwaru a ulehčily škálování. Nejvíce výhod kontejnerů využijí vývojáři microservicesMicroservices (mikroslužby)Microservices (mikroslužby) je architektura komplexnějšího SW složeného z menších aplikacívíce, ale technologie zpříjemňuje život jednoduše všem, kdo pracují se software.

V článku zjistíte:

  • Proč je kontejnerizace tak populární
  • Jaká je historie kontejnerové technologie
  • Co umí Docker a Kubernetes
  • Kdo by měl kontejnery začít využívat
  • Jaké kontejnerové řešení si vybrat

Docker si můžete sami spustit i na VPS serverech od MasterDC. O nové platformě KVM a Dockeru jsme psali v dřívějším článku Na nových VPS spustíte díky KVM i Docker.

Jaký je princip kontejnerizace?

Kontejnery vyřešily nedostatky klasické plné virtualizace a tím si získaly přízeň (nejen) vývojářů po celém světě. Pojďme si hned na začátku vysvětlit, jaký je mezi oběma technologiemi rozdíl.

U plné virtualizace se na fyzický server nainstaluje softwarová komponenta – hypervisorHypervizorHypervizor umí virtualizovat hardware do izolovaných virtuálních strojů.více – umožňující vytvářet virtuální stroje. Každý virtuální stroj, který vznikne, se chová jako samostatný server s vlastním operačním systémem. Tím ale vznikají velké režijní náklady, protože provoz hypervisoru a jednotlivých operačních systémů může spotřebovat až 20 % výkonu serveru.

Naopak kontejnerizace je virtualizací jádra operačního systému. To znamená, že všechny kontejnery běží v rámci jednoho operačního systému a sdílejí paměť, knihovny a další zdroje. To výrazně snižuje režijní náklady a zdroje se využívají efektivněji. Spuštění kontejneru je navíc mnohem rychlejší než spuštění virtuálního stroje s instalací operačního systému. Podstatnou výhodou kontejnerů je také to, že mohou být izolovány od okolního prostředí a následně nasazeny v různých prostředích.

Plná vs. kontejnerová virtualizace

Levý box zobrazuje kontejnerovou virtualizaci, pravý box klasickou plnou virtualizaci. Zdroj: Docker

Od chrootu ze sedmdesátek až k dnešním kontejnerům

Poprvé jste o kontejnerech slyšeli někdy v roce 2013? To je možné – právě tehdy kontejnery zpopularizoval a zpřístupnil široké veřejnosti open-source Docker. První předchůdci kontejnerové technologie se ale objevili už v sedmdesátých letech minulého století.

V roce 1979 přišla sedmá verze operačního systému UNIX s převratným chroot (change root) command, který umožnil jednoduchou formu izolace systému souborů. Ten o téměř dvě dekády později v operačním systému FreeBSD modifikovali na jail command, díky kterému mohli administrátoři rozdělit počítačový systém na několik nezávislých, menších systémů (tzv. jails). Odtud už byl jen krůček k prvním Solaris kontejnerům. Využívaly tzv. Solaris zón, ve kterých mohly aplikace běžet nezávisle na sobě, aniž by mohly ovlivňovat běh jiných zón.

Do vývoje technologie se v průběhu začali zapojovat i velcí hráči. Inženýři Googlu v roce 2006 přišli s technologií cgroups (control groups), která byla později zahrnuta do jádra Linuxu a vznikla tzv. „light-weight“ virtualizace LXC. K používání LXC ale byla zapotřebí manuální konfigurace a velké znalosti, a technologie proto stále zůstávala menšinovou záležitostí mezi odborníky.

Tento problém vyřešil nástup Dockeru v roce 2013. Docker zastřešil linuxové kontejnery, doplnil je o další funkcionality (například přenositelné image kontejnerů) a umožnil jejich jednoduchou správu. Tím začal kontejnerový boom, který pozorujeme do současnosti.

Chcete začít s Dockerem?

Na virtuálních serverech od MasterDC s virtualizací KVM kontejnery sami spustíte a může si vyzkoušet, jak s nimi pracovat.

Chci VPS na Docker

Jednička mezi kontejnerovými technologiemi – Docker

V současnosti existuje celá řada kontejnerových technologií, bezesporu nejrozšířenější je ale právě zmíněný Docker. Nad ostatními kontejnerovými technologiemi má Docker velkou převahu – podle dat společnosti Sysdig na něm v roce 2018 běželo 83 % kontejnerů.

Co je Docker? Jednoduše řečeno – Docker je software, který umožňuje jednoduše izolovat aplikace se všemi jejími knihovnami, konfiguračními soubory a dalšími závislými soubory do kontejnerů. Tyto kontejnery zajišťují, že aplikace mohou být spuštěny v jakémkoli prostředí. Vytvořením kontejneru ale práce Dockeru nekončí, stará se totiž o celý životní cyklus kontejnerů od jejich vzniku, přes spouštění až po zastavování.

Vedle Dockeru, existuje množství dalších technologií jako LXC, Open-VZ, CoreOS, které se liší určitými funkcionalitami a nabízí jiné využití, nejsou ale tak rozšířené a vyžadují odborné znalosti.

Základní komponenty Dockeru

V souvislosti s Dockerem často narazíte na celou řadu pojmů. Co přesně znamenají?

  • Dockerfile – textový soubor s instrukcemi k vytvoření Docker image. Specifikuje operační systém, na kterém bude běžet kontejner, jazyky, lokace, porty a další komponenty.
  • Docker image – komprimovaná, samostatná část softwaru vytvořená příkazy v Dockerfile. Je to v podstatě šablona (aplikace plus požadované knihovny a binární soubory) potřebná k vytvoření a spuštění Docker kontejneru. Images mohou být použité ke sdílení kontejnerizovaných aplikací.
  • Docker run – příkaz, který spouští kontejnery. Každý kontejner je instancí jednoho image.
  • Docker Hub – úložiště pro sdílení a management kontejnerů, kde najdete oficiální Docker images z open-source projektů i neoficiální images veřejnosti. Je ale možné pracovat i s lokálními Docker úložišti.
  • Docker Engine – jádro Dockeru, technologie na principu klient-server, která vytváří a provozuje kontejnery.

Kubernetes vs Docker vs Mesos

Dovedete si představit, jak obtížné je spravovat kontejnery, které mohou běžet i na stovkách serverů? Manuálně je to nad lidské síly, a proto se ke správě využívají orchestrátory.

Jedná se o software nad kontejnerovou sítí, který se automaticky stará o zavádění, údržbu a škálování kontejnerizovaných aplikací. V praxi umožňují efektivně využívat kapacitu serverů, reagují na podněty a dynamicky služby spouští, vypínají staré verze a zapínají nové apod. Orchestrátory usnadnily práci především vývojářům microservices (viz modrý box).

Orchestrátor Kubernetes

Orchestrátor umožňuje centrální správu kontejnerů provozovaných na více nodch. Zdroj: devopedia.org

I orchestračních technologií je celá řada, každá z nich má vlastní specifika. Mezi ostatními vyčnívá open-source Kubernetes, který má široké možnosti využití a lze ho přizpůsobit konkrétním potřebám. Kubernetes začal jako projekt Googlu zpřístupněný veřejnosti v roce 2014, nyní ho spravuje Cloud Native Computing Foundation pod záštitou Linuxu.

Podívejme se ve stručnosti na hlavní rozdíly mezi Kubernetes a jeho hlavními konkurenty.

Kubernetes vs Docker Swarm

Docker Swarm je orchestrátor společnosti Docker, který je oproti Kubernetes jednodušší a je vhodný pro menší kontejnerové clustery. Kubernetes je naopak výrazně komplexnější. To sice vyžaduje více práce administrátorů, ale odměnou je snadno spravovatelná, odolná aplikační infrastruktura. Docker navíc Kubernetes také podporuje (Kubernetes je součástí Docker Community a Docker Enterprise editions).

Kubernetes vs Mesos

Mesos je projekt společnosti ApacheApacheApache je nejpoužívanější webový server, tzn. že dodává prohlížečům jednotlivé webové stránkyvíce a oproti Kubernetes má i další vlastnosti nad rámec pouhé orchestrace. Mesos je v podstatě druh cloudového operačního systému, který koordinuje kontejnerové i nekontejnerové komponenty. Zároveň umožňuje běh více platforem a proto je možné v Mesos provozovat i Kubernetes.

Microservices a kontejnery

Kontejnerové technologie bývají často zmiňovány v souvislosti s microservices. O co se jedná?

Microservices představují způsob vývoje a provozování aplikací rozdělených na menší moduly, které spolu komunikují prostřednictvím API. Na rozdíl od velkých monolitických aplikací, jsou microservices snadné na údržbu, protože změna v jednom modulu se neprojeví v ostatních částech. O architektuře mikroslužeb si můžete více přečíst v jednom z dalších článků.

Koncept microservices začal vznikat nezávisle na vývoji kontejnerů, ale právě díky kontejnerům je možné architekturu microservices v praxi efektivně využívat. Vývoj microservices v kontejnerech umožňují orchestrátory, které zvládají management obrovského množství kontejnerů a umožňují například i rolling update (při nasazení nových verzí aplikace udržuje repliky obou verzí pro případný rollback na předešlou verzi).

Jsou kontejnery i pro vás?

Pokud jste se dočetli až sem, už víte, že kontejnery přinesly celou řadu výhod. Možná se ale stále ptáte, jestli se přechod na ně vyplatí i vám.

Odpověď je jednoduchá: z kontejnerových technologií může profitovat každý, kdo pracuje se software, ať už s vlastním nebo třetích stran.

Jaké jsou hlavní výhody kontejnerizace?

  • Kontejnery umožňují snadnou portabilitu softwaru, který může běžet podle potřeby na různých přístrojích.
  • Díky kontejnerům mohou fungovat jednotlivé části softwaru odděleně, což zvyšuje jeho celkovou bezpečnost, protože problém jedné části nezasáhne ostatní.
  • Kontejnery jsou také nepřekonatelné ve škálování – ať už počet uživatelů aplikace klesá nebo stoupá, s kontejnery lze na změny reagovat takřka okamžitě.

Výhody škálování s kontejnery

Škálování s kontejnery je velmi rychlé (mnohem rychlejší než vznik nového virtuálního stroje) a je tak možné reagovat okamžitě na velké výkyvy ve využívání aplikace. Kontejnery zároveň umožňují lépe využít zdroje serveru tím, že je aplikace rozdělená na menší části. Navíc můžeme některé mikroslužby naškálovat vícekrát, některé jen jednou, podle potřeby.

Co je pro přechod na kontejnerové řešení nutné udělat? Technicky je možné do kontejneru uzavřít i velké monolitické aplikace, tím ale vůbec nevyužijeme výhody, které kontejnerizace přináší. Naopak je nutné veškerý software rozdělit na menší komponenty zvlášť uzavřené do kontejnerů.

Jak rozbít monolitický software popisuje hned několik metodologií. Univerzální návod však neexistuje. Čím složitější jsou vazby mezi daty, tím obtížnější rozbíjení je.

Jaké kontejnerové řešení si vybrat?

Docker i Kubernetes jsou open-source produkty a proto vám nic nebrání pustit se do provozu kontejnerů na vlastní pěst. Přechod větších řešení na kontejnery už ale může být oříšek. Pokud nemáte dostatek zkušeností nebo času, můžete využít služeb datacenter, která kontejnerová řešení nabízí.

MasterDC jsme pro zájemce připravili hned několik možností:

  • Virtuální servery (VPS) s virtualizací KVM, která umožňuje, aby si zákazník sám nainstaloval Docker a spustil kontejnery.
  • Managed Kubernetes cluster běžící kompletně na fyzických serverech – varianta vhodná pro velké projekty, jen samotný Kubernetes orchestrátor vyžaduje kapacitu dvou až tří serverů.
  • Managed Kubernetes cloud hosting běžící kompletně v cloudu – vhodné pro menší instance.
  • Managed Kubernetes cluster v hybridní variantě – orchestrátor běží v cloudu a kontejnery na vlastních dedikovaných serverech.

Budoucnost kontejnerů je i mimo servery

O tom, že kontejnery jsou technologií blízké budoucnosti asi nikdo nepochybuje. Podle průzkumů o jejich využití přemýšlí stále více firem. Například report z roku 2019 společnosti Turbomic ukázal, že v současnosti kontejnerizované aplikace využívá 26 % IT společností, v roce 2021 by jich mělo být už dvojnásobné množství.

Kontejnerové řešení se ale vyvíjí i mimo oblast serverů. Linux nedávno spustil kontejnerový systém Flatpak pro distribuci GUI aplikací v desktopovém prostředí. Ve Flatpaku mohou uživatelé spouštět aplikace izolovaně od zbytku systému, což zajišťuje větší bezpečnost, zjednodušuje updaty a minimalizuje hromadění nepotřebných dat. Vedle toho vznikl například i experimentální operační systém Fedora, kde je veškerý software distribuovaný mezi kontejnery.

Nechcete si nechat ujet vlak? V MasterDC vám rádi poradíme, pro které řešení se rozhodnout – zda spustit Docker na našich VPS nebo si nechat postavit Kubernetes cluster na míru.

Líbil se vám článek? Ano / Ne