Docker a obecně linuxové kontejnerové technologie jsou v posledních málo letech na nevídaném vzestupu. Pojďme se srozumitelně a pěkně od píky podívat, o co vlastně jde a jak začít používat Docker na Fedoře 23.

Linuxové kontejnery (LXC) nejsou žádnou novinkou, neboť v linuxovém jádře je jejich podpora již pěknou řádku let. Z jistého pohledu jde vlastně o typ virtualizace, která probíhá na úrovni jádra. Díky technologii cgroups a několika druhů jmenných prostorů pro procesy (namespaces) může proces běžet v operačním systému s určitou dávkou izolace.

Nicméně hned na úvod bych chtěl zdůraznit, že izolace v tomto ohledu nedosahuje úrovně virtualizace typu kvm apod. a neměli bychom ji tak proto takto vnímat. O úrovni izolace v Dockeru ale snad někdy příště.

Co je to ten Docker?

Docker je platforma pro vývojáře a systémové správce pro vývoj, distribuci a běh aplikací v prostředí linuxových kontejnerů. Koncepce Dockeru také dovoluje sestavit aplikaci z komponent a tu pak distribuovat jako celek, beze změn mezi testovacím a produkčním prostředím. Vzhledem k tomu, že kromě jádra s sebou aplikace nese všechny potřebné komponenty (knihovny a závislé programy), nestane se, že by v produkčním prostředí nějaká z komponent chyběla.

V Docker hantýrce se často pracuje s pojmy kontejner a obraz (image). V obou případech se jedná o nějaká data (aplikace a potřebné knihovny/závislosti) a metadata. Obrazem potom rozumíme statický kontejner, který slouží jako předloha pro vytváření dalších kontejnerů.

Pojďme se tedy podívat, jak se vůbec k Dockeru ve Fedoře dostat. Na stránce Docker Hub je k dispozici registr veřejných Docker kontejnerů (v tomto případě obrazů). Pro jejich použití budeme potřebovat docker démon, který si nainstalujeme takto:

$ sudo dnf install docker

A tento démon potom můžeme spustit:

$ sudo systemctl start docker

Možná trochu nestandardní, nicméně pochopitelné, je, že jak pro spuštění Docker démona, tak pro práci s ním pomocí docker příkazu budeme potřebovat root práva. Návod, jak nakonfigurovat přístup i pro ne-root uživatele, je k dispozici na novém, úžasném Developer portálu.

Docker, první krůčky

Stáhnout první obraz, kterým bude oficiální obraz Fedora distribuce, můžeme potom takto:

$ sudo docker pull fedora

Tento příkaz stáhne základní obraz Fedory a k dispozici budete mít kontejner s několika základními balíky. V takovémto kontejneru potom můžeme spustit nějaký proces, v našem případě to bude Bash, protože se budeme chtít podívat, co v našem kontejneru vlastně je.

$ sudo docker run -ti fedora bash

Parametry -ti dávají Dockeru vědět, že máme zájem o interaktivní proces s přístupným terminálem, bez něho by shell hnedka skončil. To, že jsme v interaktivním kontejneru, poznáme změnou prompt prefixu. Můžeme například vypsat hostname, verzi OS a prvních pár nainstalovaných balíků:

[[email protected] /]# uname -n
053a7955d5f9
[[email protected] /]# grep VERSION_ID /etc/os-release 
VERSION_ID=23
[[email protected] /]# rpm -qa | head   
fedora-repos-23-1.noarch
setup-2.9.8-2.fc23.noarch
basesystem-11-1.fc23.noarch
xkeyboard-config-2.15-2.fc23.noarch
libreport-filesystem-2.6.3-1.fc23.x86_64
tzdata-2015g-1.fc23.noarch
glibc-common-2.22-5.fc23.x86_64
libstdc++-5.1.1-4.fc23.x86_64
bash-4.3.42-1.fc23.x86_64
pcre-8.37-5.fc23.x86_64

Jak vidíte, uvnitř kontejneru se můžeme cítit jako v takovém levném virtuálním stroji. Proč levném — podívejte se, jak rychle je takový kontejner vytvořen. Jedná se většinou o vteřiny, takže není divu, že se Docker celkem hojně využívá ke spouštění testů, které není vhodné spouštět přímo na hostujícím stroji.

Zároveň se tímto způsobem snadno dostaneme k funkční Fedoře na stroji, kde běží Ubuntu a naopak. Nicméně musím znovu zopakovat, že kontejnery neizolují tak, jako jsme zvyklí v klasické virtualizaci typu kvm a exituje riziko, zejména pokud proces uvnitř kontejneru běží jako root, že tento proces značně ovlivní i prostředí mimo kontejner.

A tímto vystrašením se pro tentokrát rozloučíme, nicméně další články na téma Docker budou následovat.