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. Doporučuji přiložit nějaké diagnostické nástroje, jako třeba
--installroot /opt/containers/fedora install systemd passwd dnf
fedora-releasevim 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 jako uživatel
/opt/containers/fedora/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. Uvidíte nabíhání systémových služeb a zobrazí se výzva k přihlášení.
/opt/containers/fedora/
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). Pokud chcete oddělit kontejner a připojit ho přes síťový most použijte
asystemd-nspawn -bD. Za
/opt/containers/fedora --network-bridge virbr0virbr0 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 vám v kontejneru pro vyvolání DHCP požadavku vystačí.
restart systemd-networkd
Machinectl
Kontejnery vidíte přes machinectl a přes machinectl status <jméno> je můžete prohlédnout. machinectl stop běžící kontejner ukončí.
<jméno>
Debian
Instalaci Debianu uděláte pohodlně pomocí nástroje debootstrap. Celkově příkaz bude vypadat sudo debootstrap stable. Je nutné zadat variantu (stable), cestu, a
/opt/containers/debian http://deb.debian.org/debian/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.