Průvodce kontejnery Linux: Úvod do kontejnerů

Kontejnery jsou již léta módním slovem... ale co přesně jsou?

Kontejnery představují způsob spouštění virtualizovaných aplikací na vašem počítači, podobně jako virtuální stroje, ale využívající jinou sadu základních technologií. Mohou být složité na pochopení, ale jsou nezbytné pro řízení všeho Minecraft servery společnosti Google. A my vám ukážeme, jak je nastavit.

Budeme používat Linux, operační systém vytvořený se zaměřením na přenositelnost, modularitu a stabilitu. Linux je ve všem od serverů přes mikrovlnky až po videoherní konzole. Kontejnery se neomezují pouze na provoz na Linuxu, ale technologie za nimi se nejlépe hodí a běží nejlépe na Linuxu. Pokud s Linuxem začínáte, doporučujeme vám podívat se na naše průvodce pro začátečníky před potápěním.

Jsou kontejnery virtuálními stroji?

Kontejnery mohou být složité téma, ale nejlepší je začít s jedním klíčovým bodem: kontejner je ne virtuální stroj. Virtuální stroj je simulovaná verze konkrétního hardwaru a jeho softwaru, která běží v takzvaném hypervizoru. Pokud jste někdy používali software jako VirtualBox nebo

víceprůchodový, pak jste použili hypervizor.

Hypervizor obvykle běží buď jako svůj vlastní operační systém (známý jako hypervizor typu 1) nebo v rámci jiného operačního systému, jako je Windows nebo Ubuntu (hypervizor typu 2). Odpovědností hypervizora je prezentovat hostovanému operačnímu systému simulovaný hardware, který vyžaduje ke spuštění. Nahoře pak může běžet celý operační systém. To zahrnuje vše od simulovaného CPU a RAM po datové sběrnice, diskové jednotky nebo síťové adaptéry. Tato simulace je výpočetně nákladná, takže virtuální stroje mají obvykle značnou režii.

Takže, co je kontejner?

Kontejner je podobný virtuálnímu počítači v tom, že obsahuje a spouští software v izolovaném prostředí na hostitelském systému. Kontejnery však nahrazují tradiční hardwarovou virtualizaci tím, že se přímo spoléhají na hostitelský operační systém. Kontejnery sdílejí knihovny a binární soubory hostitelského operačního systému a mají pouze prostředky a závislosti potřebné ke spuštění konkrétní aplikace, kterou obsahují. To znamená, že není potřeba úplný operační systém na kontejner, protože všechny kontejnery běžící na a systém může sdílet jeden hostitelský operační systém při zachování segregace, kterou získáte s virtuálními stroje.

Kontejnery přistupují k hostitelskému operačnímu systému prostřednictvím modulu kontejneru, který spravuje běžící kontejnery a řídí jejich přístup k základnímu operačnímu systému. To může zahrnovat vynucení zabezpečení mezi kontejnery a udělení nebo odepření přístupu k souborům operačního systému nebo síťovým připojením.

Jaké jsou některé kompromisy při používání kontejnerů?

Zatímco virtuální stroje a kontejnery jsou podobné, používání kontejnerů má své nevýhody. Za prvé, virtuální stroje jsou považovány za bezpečnější, protože útočná plocha pro „únik“ z virtuálního stroje je výrazně menší a hůře prostupná. Kontejner nemusí být vhodný například pro testování malwaru.

Hlavní výhodou použití kontejnerů je, že jsou lehké, takže není potřeba virtualizovat celý operační systém, což znamená minimální dobu spouštění a snížení režie systému. To znamená, že na jednom hostiteli může běžet mnohem více kontejnerů, což by s virtuálními stroji nebylo možné.

Protože kontejnery nevyžadují úplný operační systém, lze je snadno zabalit do menších obrázků a distribuovat. Zatímco úplný obraz virtuálního stroje může mít snadno desítky gigabajtů, kontejnery mohou mít obrazy o velikosti až 15 kb. Díky tomu je velmi snadné distribuovat a používat nádoby. Ukážeme to spuštěním několika jednoduchých příkladů kontejnerů v Dockeru.

Instalace Dockeru

To je hodně teorie, tak pojďme do praxe. Abychom vám ukázali, jak nastavit kontejner, nainstalujeme Docker v Ubuntu 23.10 a použijeme jej ke spuštění jednoduchého kontejneru Hello World. Naše kroky jsou testovány na virtuálním počítači, ale můžete také spustit duální systém z počítače se systémem Windows nebo použít a skvělý notebook pro Linux.

Docker se rychle stal de facto kontejnerizačním nástrojem. Zatímco jiné nástroje existují, Docker je široce přijímán a je ideální pro všechny aplikace kromě těch nejnáročnějších. tam je dokumentaci o různých způsobech instalace Dockeru, ale použijeme skript pro pohodlnou instalaci. Tento příkaz stáhne skript z get.docker.com do vašeho místního počítače:

$ curl -fsSL https://get.docker.com -o get-docker.sh

Poté můžete spustit tento skript a nainstalovat Docker. Správnou instalaci Dockeru můžete ověřit kontrolou verze pomocí:

$ sudo sh ./get-docker.sh

Následuje kontrola verze pomocí:

$ sudo docker version

Můžete také ověřit, že služba dockeru běží na pozadí:

$ sudo systemctl status docker

Mělo by to uvádět „aktivní (běžící)“ zeleným textem, jak je zvýrazněno na snímku obrazovky níže. Verze enginu Docker by se také měla vytisknout bez chyb.

Spuštění jednoduchého příkladu

Nyní, když je Docker nainstalován, můžete jej použít ke stažení bitové kopie kontejneru. Obrazy kontejnerů jsou velmi podobné ISO pro virtuální stroje, až na to, že jsou obvykle menší a snáze se sestavují. Stáhněte si jednoduchý obrázek kontejneru hello-world pomocí následujícího příkazu:

$ sudo docker pull hello-world

Jakmile je tento obrázek stažen, můžete to ověřit uvedením obrázků stažených do vašeho systému pomocí následujícího:

$ sudo docker images

Nyní byste měli vidět stažený hello-world. Všimněte si velmi malé velikosti (13 kB na našem testovacím stroji) a také jeho značky. Tag obrázku je v podstatě jeho verze. Ve výchozím nastavení Docker stáhne nejnovější verzi obrázku. Spusťte kontejner založený na tomto obrázku pomocí:

$ sudo docker run hello-world: latest

Tím se spustí Dockers' hello-world spiel, který běží z velmi malého C programu (který si můžete vyzkoušet na GitHub).

Gratulujeme; spustili jste svůj první kontejner! V tomto případě program vydal svůj výsledek a dokončil své provádění. Kontejner je nyní mrtvý a již neběží.

Jak udržet kontejnery při životě

Po spuštění základního kontejneru nyní můžeme vytvořit složitější příklad, který se po dokončení úkolu okamžitě neukončí. Kontejnery jsou často postaveny kolem jednoho procesu, který může způsobit více procesů. Jakmile tento základní proces skončí, opustí se s ním i celý kontejner. Může to znít jako omezení, ale ve skutečnosti je to velmi podobné tomu, jak init systémy v plném linuxovém jádře fungují.

Abychom uvedli trvalý příklad, můžeme vytáhnout obrázek pro Nginx, což je webový server používaný k hostování významného procenta světových webových stránek. Pro tento příklad jsme vybrali Nginx, protože je jednoduchý, nevyžaduje žádnou pokročilou konfiguraci a je lehký. Stáhněte si nejnovější obrázek Nginx pomocí následujícího příkazu:

$ sudo docker pull nginx

Přidali jsme -p příznak zde pro konfiguraci předávání portů z kontejneru do hostitelského operačního systému. Port 80 se používá pro nešifrovaný HTTP (tj. web) provoz. To vám umožní přístup ke kontejneru z vašeho hostitelského počítače:

$ sudo docker run -p 80:80 nginx

Tento příkaz se spustí ve vašem terminálu v připojeném režimu, což znamená, že kontejner je doslova připojen k vašemu terminálu, takže tam budou vytištěny všechny protokoly z kontejneru. Jakmile se nádoba nastartuje, otevřete ji http://localhost ve vašem webovém prohlížeči. Uvidíte uvítací obrazovku Nginx podobnou níže:

Kontejner Nginx nyní běží uvnitř vašeho kontejnerového motoru. Zatímco Nginx běží v připojeném režimu, bude pokračovat pouze tak dlouho, dokud bude otevřený. Kontejner Nginx můžete opustit stisknutím Ctrl + C ve vašem terminálu.

Jak spouštět kontejnery na pozadí

Chcete-li spustit Nginx na pozadí, přidáme další příznak, -d, pro oddělený režim. Tím se kontejner odpojí od vašeho terminálu, což znamená, že je na pozadí. Například:

$ sudo docker run -d -p 80:80 nginx

Můžete uvést spuštěné kontejnery v systému. Všimněte si, jak váš kontejner Nginx nyní běží na pozadí a bylo mu přiděleno ID.

$ sudo docker ps

Běžící kontejner na pozadí lze zabít pomocí jeho ID. Můžete si také všimnout, že kontejner dostal název. Pokud není zadán, Docker přidělí každému kontejneru náhodný jedinečný název.

$ sudo docker kill 

Můžete to však vyzkoušet na několika zajímavějších snímcích. Je jich dost k dispozici na Docker hub, který funguje jako centrální úložiště pro obrázky veřejných kontejnerů.

Potápění hlouběji s kontejnery

Toto byl krátký úvod do kontejnerů. Kontejnery mohou být neomezeně složité, ale jsou základním stavebním kamenem vysoce distribuovaných systémů, které provozují většinu našeho moderního internetu. Tato síla však neubírá jejich použití v menším měřítku. Znalost základů kontejnerů a Dockeru může být vstupní branou ke spuštění užitečných místních služeb, jako je a Minecraft server nebo Plex na starém PC.