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ů:
[root@053a7955d5f9 /]# uname -n
053a7955d5f9
[root@053a7955d5f9 /]# grep VERSION_ID /etc/os-release
VERSION_ID=23
[root@053a7955d5f9 /]# 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.