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.