Pokud někdo použije slovo kontejner, stane se, že častěji, než “kontejner na odpadky” si představíme kontejner v kontextu omezeného prostoru linuxového jádra pro oddělení jednotlivých procesů a zdrojů. Před pár lety se objevilo obrovské nadšení z dockeru, LXC, apod. Ve Fedoře spokojeně používáme podman a uživatelé neměnného systému Fedora Silverblue pro některé činnosti používají toolbox. Dneska si ukážeme, jak vytvořit kontejnery pomocí systemd.

Předpoklady

Podpora pro instalaci systemd kontejnerů byla (alespoň u mě) ve výchozím stavu připravená (Fedora Workstation 31). Pokud z nějakého důvodu balíček systemd-container chybí, doinstalujte ho. Pro použití Fedory pro kontejner stačí dnf, ale ukážeme si i nástroj pro systémy založené na Debianu. Také budete potřebovat vytvořený síťový most (já budu používat ten vytvořený pro virtmanager). Pracujte jako root, nebo používejte sudo.

DNF – připravme si kontejner

Nainstalujeme si nejprve nějaké balíčky pro základní systém do kontejneru. Přihoďte si, co uznáte za vhodné a samozřejmě si rozmyslete cestu, kam je instalovat. Minimální instalace by vypadala nějak takto: sudo dnf --releasever=31
--installroot /opt/containers/fedora install systemd passwd dnf
fedora-release
. Doporučuji přiložit nějaké diagnostické nástroje, jako třeba vim iproute curl. Pokud samozřejmě kontejner zprovozníte s přístupem na internet doinstalujete vše potřebné později.

Pozor na SELinux! Je potřeba obnovit selinux kontext souborů v nově nainstalované adresářové struktuře. restorecon
-Rv /opt/containers/fedora/
.

Spouštíme kontejner

Základní příkaz je systemd-nspawn (přečtěte si určitě manuálovou stránku!). Vstoupíme do kontejneru podobně jako při použití chroot pomocí systemd-nspawn -D
/opt/containers/fedora/
jako uživatel root. Změňte si heslo pro uživatele root zavoláním passwd. Tento kontejner jde vypnout pomocí Ctrl + D, nebo Ctrl
+ ]
(na české klávesnici Ctrl + Alt
gr + G
).

Jakmile je heslo nastavené, můžeme kontejner “nabootovat” přidáním -b. Celý příkaz bude vypadat systemd-nspawn -bD
/opt/containers/fedora/
. Uvidíte nabíhání systémových služeb a zobrazí se výzva k přihlášení.

Síťování

Pokud neuvedete žádnou speciální volbu pro nastavení síťe, budete s kontejner sdílet síťový prostor s hostitelem (ověřte pomocí ip
a
). Pokud chcete oddělit kontejner a připojit ho přes síťový most použijte systemd-nspawn -bD
/opt/containers/fedora --network-bridge virbr0
. Za virbr0 doplňte jméno požadovaného síťového mostu.

Musí vám na daném rozhraní běžet DHCP server, nebo prostě musíte nastavit síťová rozhraní. Jinak systemctl
restart systemd-networkd
vám v kontejneru pro vyvolání DHCP požadavku vystačí.

Machinectl

Kontejnery vidíte přes machinectl a přes machinectl status <jméno> je můžete prohlédnout. machinectl stop
<jméno>
běžící kontejner ukončí.

Debian

Instalaci Debianu uděláte pohodlně pomocí nástroje debootstrap. Celkově příkaz bude vypadat sudo debootstrap stable
/opt/containers/debian http://deb.debian.org/debian/
. Je nutné zadat variantu (stable), cestu, a apt repozitáře. Vstupte do dané instalace a vytvořte tam uživatele, který bude mít sudo práva, root login je v Debianu zakázán.

Závěrem

Bohužel se mi nepodařilo zprovoznit mapování portů předvolbou -p (znáte z podman). Kontejnery jsou pro mě náhradou za lxc a fungují spolehlivě. Kontejnery doporučuji používat pokaždé, kde není nutná plnohodnotná instalace, ušetříte spoustu času a i na používání jsou pohodlnější. Pozor na to (a manuálová stránka na to upozorňuje), že nejde o nástroj k použití na kritické věci / do produkce.