Gartner píše, že za dva roky bude kontejnerové technologie využívat polovina světových organizací. Řekneme vám, proč jsou potřeba.
Virtualizace je rozdělení hardwarového serveru na několik virtuálních strojů (VM). Výsledkem je, že výpočetní výkon je rozdělen mezi několik „uživatelů“.
Jednoduše řečeno, virtualizace je jako vysokorychlostní vlak s mnoha cestujícími najednou. Sdílejí vlastně náklady na pohonné hmoty a údržbu dopravy, využívají ji, když je to nutné, a šetří místo na cestách (oproti situaci, kdy si každý místo vlaku volí vlastní auto).
Virtualizace je řízena softwarovou komponentou zvanou hypervizor. Abstrahuje virtuální počítač od hardwaru, takže uživatelská aplikace neví, že běží ve virtuálním prostředí.
To vede k hlavní výhodě virtualizace: virtuální stroj lze beze změn přenést z jednoho serveru na druhý spolu s operačním systémem a aplikacemi.
V případě kontejnerů se na samostatné komponenty nerozděluje hardware, ale operační systém. Kontejnery jsou izolované prostředí pro aplikaci, které obsahuje vše, co potřebuje ke spuštění, jako jsou softwarové knihovny, soubory a metadata.
Obdobu lze nakreslit s námořními kontejnery, s jejichž pomocí se na lodích, kamionech nebo vlacích přepravuje jednotlivý náklad. Softwarové kontejnery jsou moduly s kódem, které provádějí konkrétní úkol.
Vzhledem k tomu, že se do kontejneru vejde pouze jedna aplikace nebo funkce, váží mnohem méně než obraz virtuálního stroje a je vytvořena (spouštěna) rychleji. Z tohoto důvodu je využívá například Spotify.
Kontejnery v infrastruktuře této služby jsou zodpovědné za přidávání hudebních skladeb do seznamů skladeb. Každá kontejnerová služba při přístupu k datovému centru společnosti provádí jeden úkol.
První zjistí jméno interpreta, druhý stáhne obal alba, třetí stáhne text písně a tak dále. Toto „oddělení odpovědností“ pomáhá službě sloužit 70 milionům uživatelů. V tomto případě jsou všechny nádoby od sebe izolovány. Vzhledem ke své malé velikosti vyžadují méně paměti a výpočetního výkonu než virtuální stroje. Mohou snížit zatížení serverů o 20–80 % ve srovnání s virtuálními počítači.
Kromě Spotify využívají kontejnery k vývoji svých služeb i společnosti jako Yelp, Airbnb, Google, Microsoft, Lyft, eBay, PayPal a mnoho dalších.
Systém správy kontejnerů (orchestrační systém) je webový administrační panel, který spravuje provoz kontejnerů. Příkladem může být open source platforma Kubernetes vyvinutá společností Google.
Existují i jiná řešení – Docker, Rancher, OpenShift a tak dále.
Jsou potřebné pro flexibilní škálování virtuální infrastruktury. Tyto systémy spravují „plán“ (říkají, kdy spustit konkrétní službu) a rozdělují zátěž na servery tak, aby byly výpočetní zdroje využívány rovnoměrně.
V podstatě jsou orchestrační systémy, například stejné Kubernetes, transformátorem obědových boxů, který ukládá veškeré „jídlo“ na jednom místě, ale poskytuje každému „jídlu“ vlastní nezávislou přihrádku. Jídlo lze vyjmout, vyměnit a vrátit zpět, aniž by to ovlivnilo zbytek obsahu.
Kubernetes během provozu sjednocuje servery do tzv. clusteru – společné sítě, kde mezi sebou mohou „stroje“ komunikovat. Jeden server funguje jako „mozek“ systému a řídí zbývající „stroje“ (nazývané také uzly). Uzly, které přijímají pokyny z hlavního serveru, vytvářejí, odstraňují a přesouvají kontejnery.
Výhodou systémů pro správu kontejnerů je, že veškerá tato „interní kuchyně“ je skryta před správcem systému nebo vývojářem. Jejich úkolem je jednoduše hostovat kontejnery a Kubernetes se postará o zbytek.
Stále je však třeba vzít v úvahu řadu funkcí provozu takových systémů. Přestože jsou kontejnery izolované a nemohou se navzájem rušit, sdílejí operační systém. Proto je důležité zajistit, aby kód kontejnerové aplikace nenarušoval její činnost.
Další výzvou je bezpečnost takových systémů. Jedna služba může hostit více kontejnerových aplikací, což vytváří další slabá místa, která mohou útočníci zneužít. Šance, že narazíte na zranitelnost, bude menší, pokud budou mít operační systém a kontejnery pouze nezbytnou sadu nástrojů.
Prostředí Kubernetes a organizovat práci s kontejnery si můžete sami od začátku – k tomu jsou všechny pokyny poskytovány na GitHubu, kde se nachází zdrojový kód projektu.
Další možností je použití cloudových služeb (například „Kubernetes Containers“ od Mail.Ru), které automatizují proces instalace Kubernetes a umožňují rychle změnit velikost clusterů, pokud se provoz na webu prudce zvýší. V tomto případě vše nastavují odborníci s bohatými zkušenostmi s prací s Kubernetes na velkých projektech.
V tomto článku vám řekneme, co jsou kontejnery, kde se používají a jak mohou být užitečné.

Za prvé, tento článek bude užitečný pro ty, kteří nejsou vůbec obeznámeni s kontejnery nebo Dockerem. Probereme úplné základy a náš příklad vytvoření aplikace bude docela jednoduchý. Umožní vám to však porozumět základům Dockeru a poté přejít na další pokročilé věci.
Na závěr bude praktická část: vytvoříme malou aplikaci, zabalíme ji do obrázku a spustíme. Všechny akce si ukážeme na příkladu virtuálního stroje cloudové platformy Selectel.
Obsah
- Co jsou kontejnery
- Výhody používání kontejnerů Docker
- Docker řeší problémy se závislostmi a prostředím
- Izolace a bezpečnost
- Zrychlete a automatizujte nasazení a škálování aplikací
- Kontejnery se přibližují architektuře mikroslužeb
- Docker compose – nasazení více kontejnerů současně
- Ukládání dat v Dockeru
- Svazky (svazky Dockeru)
- Připojení adresáře (bind mount)
- Architektura (komponenty) Dockeru
- Démon Docker
- Docker klient
- Obrázek dockeru
- Docker kontejner
- Registr Docker
- dockerfile
- Vytvoření virtuálního počítače pro práci s Dockerem
- Instalace Dockeru
- Provoz kontejneru
- Vytvoření vlastního obrázku a spuštění kontejneru
Co jsou kontejnery
Než začnete mluvit o Dockeru, musíte říci pár slov o technologii kontejnerizace.
kontejnery je způsob, jak standardizovat nasazení aplikace a oddělit ji od celkové infrastruktury. Instance aplikace běží v izolovaném prostředí, které nemá žádný vliv na základní operační systém.
Vývojáři nemusí přemýšlet o tom, v jakém prostředí bude jejich aplikace fungovat, zda tam budou potřebná nastavení a závislosti. Jednoduše vytvoří aplikaci, zabalí všechny závislosti a nastavení do jediného obrázku. Tento obraz pak můžete spustit na jiných systémech, aniž byste se museli bát, že aplikace neběží.
přístavní dělník je platforma pro vývoj, dodávání a provozování kontejnerizovaných aplikací. Docker umožňuje vytvářet kontejnery, automatizovat jejich spouštění a nasazení a spravovat jejich životní cyklus. Umožňuje vám provozovat více kontejnerů na jednom hostitelském počítači.
Kontejnerizace je podobná virtualizaci, ale není to totéž. Virtualizace spouští plnohodnotného hostitele na hypervizoru s vlastním virtuálním hardwarem a operačním systémem. V tomto případě můžete v jednom OS provozovat jiný OS. V případě kontejnerizace proces běží přímo z jádra hostitelského operačního systému a nevirtualizuje hardware. To znamená, že kontejnerová aplikace může běžet pouze na stejném OS jako hostitelský. Kontejnery nevirtualizují hardware, takže spotřebovávají méně prostředků.
Výhody používání kontejnerů Docker
Kontejnery usnadňují práci programátorům i správcům, kteří tyto aplikace nasazují.
Docker řeší problémy se závislostmi a prostředím
Kontejnery umožňují zabalit aplikaci a všechny její závislosti do jednoho obrazu: knihovny, systémové nástroje a konfigurační soubory. To usnadňuje port aplikace do jiné infrastruktury.
Vývojáři například vytvoří aplikaci ve vývojovém systému – tam se vše nakonfiguruje, aplikace funguje. Jakmile bude připraven, je třeba jej přesunout do testovacího systému a poté do výroby. Pokud jeden z nich nemá požadovanou závislost, aplikace nebude fungovat. Programátoři si budou muset dát pauzu od vývoje a spolupracovat s týmem podpory, aby zjistili situaci.
Kontejnery tento problém nemají, protože obsahují vše potřebné ke spuštění aplikace. Specialisté se zabývají vývojem, nikoli řešením problémů s infrastrukturou.
Izolace a bezpečnost
Kontejner je sada procesů izolovaných od hlavního operačního systému. Aplikace běží pouze uvnitř kontejnerů a nemají přístup k základnímu operačnímu systému. To zvyšuje bezpečnost aplikací: nebudou moci náhodně nebo úmyslně poškodit hlavní systém. Pokud aplikace v kontejneru spadne nebo zamrzne, nebude to mít žádný vliv na základní operační systém.
Zrychlete a automatizujte nasazení a škálování aplikací
Kontejnery usnadňují nasazení aplikací. V klasickém přístupu je k instalaci programu potřeba provést několik akcí: spustit skript, změnit soubory nastavení a tak dále. V tomto procesu nelze vyloučit možnost lidské chyby: uživatel spustí skript dvakrát, poplete sekvenci nebo něčemu nerozumí. Kontejnery umožňují zcela automatizovat tento proces, protože zahrnují všechny potřebné závislosti a pořadí akcí.
Kontejnery také usnadňují nasazení na více serverů. V klasickém přístupu, aby bylo možné nasadit stejnou aplikaci na několika počítačích, budete muset opakovat stejné kroky. Kontejnery odstraňují tuto práci a umožňují vám automatizovat nasazení.
Kontejnery se přibližují architektuře mikroslužeb
Kontejnery dobře zapadají do architektury mikroslužeb. Jedná se o vývojový přístup, ve kterém je aplikace rozdělena na malé komponenty, které jsou co nejvíce nezávislé. Typicky kontrastuje s monolitickou architekturou, kde jsou všechny části systému navzájem pevně spojeny.
To vám umožní rychleji vyvíjet nové funkce, protože v případě monolitické architektury může změna jedné části ovlivnit zbytek systému.
Docker compose – nasazení více kontejnerů současně
Docker-compose umožňuje nasadit a nakonfigurovat více kontejnerů současně. Například pro webovou aplikaci potřebujete nasadit zásobník LAMP: Linux + Apache, MySQL, PHP. Každá aplikace je samostatný kontejner pro OS Linux. Ale v této situaci potřebujeme všechny kontejnery pohromadě a ne samostatnou aplikaci. Docker-compose umožňuje nasadit a nakonfigurovat všechny aplikace jedním příkazem, ale bez něj byste museli nasazovat a konfigurovat každý kontejner zvlášť.
Ukládání dat v Dockeru
Jedním z hlavních rysů kontejnerů je pomíjivost. To znamená, že kontejnery lze kdykoli zastavit, znovu spustit nebo zničit. V tomto případě budou všechna nashromážděná data v kontejneru ztracena. Aplikace je proto potřeba vyvíjet tak, aby se nespoléhaly na ukládání dat v kontejneru, tomu se říká Stateless princip.
To je dobré pro aplikace nebo služby, které nezachraňují výsledky své práce. Například funkce pro výpočet nebo převod dat: dostali jako vstup jednu sadu dat, převedli ji nebo vypočítali a vrátili výsledek. To je vše, nemusíte nikde nic ukládat.
Ale ne všechny aplikace jsou takové a je potřeba ušetřit spoustu dat. Kontejnery nabízejí několik způsobů, jak toho dosáhnout.
Svazky (svazky Dockeru)
Jedná se o způsob, jakým Docker sám vytváří adresáře pro ukládání dat. Mohou být zpřístupněny různým kontejnerům, aby si mohly vyměňovat data. Ve výchozím nastavení jsou tyto adresáře vytvořeny na hostitelském počítači, ale můžete také použít vzdálené úložiště: souborový server nebo objektové úložiště.
Připojení adresáře (bind mount)
V tomto případě je adresář nejprve vytvořen na hostitelském počítači a teprve poté připojen do kontejnerů.
Tato metoda se však nedoporučuje, protože ztěžuje zálohování, migraci a sdílení dat mezi více kontejnery.
Architektura (komponenty) Dockeru
Nyní si povíme podrobněji o komponentách, které tvoří Docker.
Démon Docker
Toto je nějaký rezidentní proces, který neustále běží na hostitelském počítači. Vlastní celou infrastrukturu a také poskytuje rozhraní pro interakci s kontejnery, včetně vytváření a mazání, spouštění a zastavování.
V raných verzích platformy Docker můžete najít zmínku o dockerdu, ale v tuto chvíli již byli démoni rozděleni do samostatných projektů. Stále častěji se můžete setkat s jeho současným – kontejnerovaným.
Docker klient
Toto je rozhraní příkazového řádku pro správu démona Docker. Tohoto klienta používáme při vytváření a nasazování kontejnerů a klient odesílá tyto požadavky démonovi Docker.
Obrázek dockeru
Jedná se o neměnný soubor (image), ze kterého se nasazují kontejnery. Aplikace jsou zabaleny do obrázků, ze kterých se pak vytvářejí kontejnery. V technické literatuře můžete také najít popis obrázku jako šablonu pro spuštění procesu.
Uveďme analogii na příkladu instalace operačního systému. Distribuce OS (image) obsahuje vše, co potřebujete k instalaci. Tento obraz však nelze spustit, nejprve je třeba jej „nasadit“ do hotového OS. Distribuční sada pro instalaci OS je tedy obraz a nainstalovaný a spuštěný OS je kontejner. Ale kontejnery se obvykle nasazují jedním příkazem – je to mnohem jednodušší a rychlejší než instalace OS.
Docker kontejner
Toto je aplikace již nasazená z bitové kopie a spuštěná.
Registr Docker
Toto je úložiště s obrázky. Vývojáři vytvářejí obrazy svých programů a ukládají je do úložiště, aby je bylo možné stáhnout a používat. Běžným veřejným úložištěm je Docker Hub. Obsahuje obrázky mnoha oblíbených programů nebo platforem: databáze, webové servery, kompilátory, operační systémy a tak dále. Můžete si také vytvořit vlastní soukromé úložiště, například v rámci firmy. Vývojáři tam budou umisťovat obrázky, které bude používat celá společnost.
dockerfile
Dockerfile je instrukce pro vytvoření obrazu. Jedná se o jednoduchý textový soubor obsahující jeden příkaz na řádek. Určuje všechny programy, závislosti a bitové kopie, které jsou potřebné k nasazení bitové kopie.
Zvažte například Dockerfile, který později v tomto článku použijeme k nasazení naší vlastní aplikace:
První řádek znamená, že jako základ bereme obrázek s názvem python verze 3, tomu se říká základní obrázek. Docker jej najde v registru dockerů, stáhne si jej a použije jako základ. Druhý řádek znamená, že musíte soubor zkopírovat main.py do kořenového adresáře systému souborů kontejneru. Třetí řádek znamená, že musíte spustit python a předat mu název souboru jako parametr main.py.
Dále se podívejme na příklady několika příkazů dockeru a na to, co se stane, když je spustíme.

Všechny tyto příkazy se provádějí v klientovi Docker, který je odešle démonovi Docker:
- Tým sestavení dockeru (zelená šipka) načte dockerfile a vytvoří obrázek.
- Tým docker vytáhnout (červená šipka) stáhne obrázek z registru dockeru. Ve výchozím nastavení docker stahuje obrázky z veřejného úložiště Docker Hub. Můžete si ale vytvořit vlastní úložiště a nakonfigurovat Docker, aby s ním pracoval.
- Tým docker run (černá šipka) vezme obrázek a spustí z něj kontejner.
Vytvoření virtuálního počítače pro práci s Dockerem
Přejděme k praktické části. Nainstalujeme docker, vytvoříme aplikaci, zabalíme do kontejneru a spustíme. Využijeme například virtuální stroj na platformě Selectel.
Na ovládacím panelu přejděte do části „Cloud Platform“ – „Servery“, klikněte na tlačítko „Vytvořit server“.

Na další obrazovce vyberte parametry serveru: název, region, operační systém, parametry výkonu atd. Nyní jsou pro nás důležité parametry „Zdroj“ – vyberte OS Ubuntu 20.04 a „Konfigurace“ – vyberte 2 vCPU a 8 GB RAM.

Dále věnujte pozornost oddílům Síť и Přístup. V sekci Síť musíte vybrat podsíť s veřejnou adresou, abyste se mohli připojit k virtuálnímu počítači z Internetu. V kapitole Přístup Bude zadáno heslo pro uživatele root a také si budete muset stáhnout klíč SSH pro připojení k virtuálnímu počítači. Podrobné pokyny pro připojení naleznete v databázi znalostí.

Poté v dolní části stránky klikněte na tlačítko „Vytvořit“. Virtuální stroj je vytvořen během několika minut a poté, co se stane AKTIVNÍ, se k němu můžete připojit přes SSH.

Instalace Dockeru
Jako příklad se podíváme na instalaci dockeru pomocí Ubuntu. Pokud máte jinou distribuci Linuxu nebo operační systém, vyhledejte příslušné pokyny na oficiálních stránkách.
Nejprve synchronizujte databázi balíčků apt a nainstalujte potřebné závislosti:
Dále importujte klíč GPG pro úložiště dockeru:
Nyní přidáme nové úložiště do seznamu apt:
Nyní můžete nainstalovat docker:
Ve výchozím nastavení má k démonu dockeru přístup pouze uživatel root. Aby s Dockerem mohli pracovat i další uživatelé, je potřeba je přidat do speciální skupiny – docker. Spusťte tento příkaz jako běžný uživatel:
Poté se musíte znovu přihlásit, aby se změna projevila.
Provoz kontejneru
Nyní zkusme spustit nějakou hotovou aplikaci. Spusťte příkaz:
Tým docker run vytvoří a spustí kontejner z obrázku. V tomto příkladu vytvoříme kontejner z obrazu ubuntu a poté v něm spustíme příkaz echo ‘ahoj z ubuntu’. Ale protože máme čistou instalaci Dockeru a nestáhli jsme jediný obrázek, Docker nejprve najde tento obrázek ve veřejném úložišti Docker Hub, stáhne si ho a poté z něj vytvoří kontejner. Až budeme příště potřebovat obraz ubuntu, docker ho již nestáhne.
Po provedení příkazu se řádek objeví v terminálu ahoj z ubuntua kontejner se okamžitě zastaví. Nyní spustíme další příkaz:
Tento příkaz spustí kontejner interaktivně, což znamená, že kontejner se spustí a čeká na další příkazy. V tomto případě se ocitneme uvnitř operačního systému kontejneru: spustí se shell (bash) a uvnitř kontejneru budeme moci provádět některé příkazy. Chcete-li opustit kontejner, zadejte příkaz výstup.
Vytvoření vlastního obrázku a spuštění kontejneru
Nyní vytvoříme aplikaci HelloWorld v Pythonu, zabalíme ji do obrázku a spustíme.
Nejprve si vytvořte adresář, ve kterém budeme pracovat, a přejděte do něj:
Pojďme vytvořit soubor main.py a napište do něj jeden řádek kódu:
Pojďme zkontrolovat, že náš program funguje. Chcete-li to provést, spusťte příkaz:
V konzole by se měla objevit zpráva Zdravím z pythonu. Toto je naše jednoduchá aplikace. Nyní jej musíme zabalit do obrázku dockeru. Chcete-li to provést, vytvořte soubor dockerfile a napište do něj tři řádky:
V prvním řádku označujeme obrázek, který bereme jako základ. Protože píšeme aplikaci v Pythonu, potřebujeme, aby byla již nainstalována v našem obrazu. Nejjednodušší způsob, jak to udělat, je použít hotový oficiální obrázek z Docker Hub. Číslo 3 je značka. To znamená, že musíte použít třetí verzi Pythonu. Místo toho můžete použít značku poslední, což znamená nejnovější verzi, nebo můžete zadat konkrétní číslo verze, například 3.8.8.
Na druhém řádku zkopírujeme náš soubor main.py do kořenového adresáře obrázku.
Třetí řádek – spusťte python a předejte mu název našeho souboru jako parametr.
Nyní můžete vytvořit obrázek z tohoto souboru dockeru. Spustíme příkaz:
Parametr -t označuje název našeho obrázku, nazvali jsme ho first-docker-app.
Vzhledem k tomu, že ještě nemáme stažený obrázek pythonu, docker si jej stáhne z Docker Hub a poté jej použije jako základ pro vytvoření našeho obrázku.
Podívejme se na seznam nainstalovaných obrázků:
Uvidíme, že máme nainstalované tři obrazy:
first-docker-app – to je náš obrázek, který jsme právě vytvořili. python je obrázek pythonu, který se docker automaticky stáhl, aby vytvořil náš obrázek. ubuntu je obrázek, který jsme se pokusili spustit hotovou aplikaci.
Nyní vytvoříme kontejner z našeho obrázku a spustíme jej:
V důsledku toho získáme následující výsledek: Zdravím z pythonu.
Sečteno a podtrženo: Vytvořili jsme naši aplikaci, zabalili ji do obrazu dockeru a spustili. Samozřejmě, toto je velmi jednoduchý příklad. Náš program se skládá pouze z jednoho řádku a dockerfile se skládá ze tří. To vám ale umožní pochopit základní principy Dockeru, jak funguje, jak vytvářet vlastní obrázky a spouštět kontejnery.





