Tylko Docker? A może systemd-nspawn?
Docker to chyba dziś najczęściej wymieniana implementacja kontenerów w świecie Linuksa. Ale czy jedyna? Oczywiście, że nie. Jak zwykle świat Open Source oferuje dużą różnorodność. Dla przykładu zwróćmy uwagę na systemd – m. in. menedżer usług w RHEL7 – posiadający własną implementację kontenerów.
Rozwiązanie to działa przede wszystkim w oparciu izolację systemu plików (podobnie do „chroot”) oraz ścisłą integrację z systemd. Co ciekawe pierwotnym celem stworzenia kontenerów „nspawn” (spawn a namespace container) było… testowanie i rozwijanie samego systemd. My oczywiście możemy wykorzystać ten mechanizm do innych celów: testowanie innej wersji systemu operacyjnego lub oprogramowania.
Zobaczmy na przykładzie, jak to działa.
Powiedzmy, że korzystamy z Fedory 23 i chcemy uruchomić kontener z systemem Fedora 22. (działa dla Fedora Linux od wersji 19 do 23) W pierwszym kroku zbudujemy „dysk” tego kontenera:
# semanage fcontext -a -t svirt_sandbox_file_t '/var/lib/machines(/.*)?' # dnf -y --releasever=22 --installroot=/var/lib/machines/fedora22 \ --disablerepo='*' --enablerepo=fedora --enablerepo=updates \ install systemd passwd dnf fedora-release vim-minimal # restorecon -Rvv /var/lib/machines/
Zatem w katalogu /var/lib/machines/fedora22 mamy system plików Fedory 22. Teraz możemy uruchomić kontener (a w nim proces /bin/bash) i ustawić hasło administratora:
# systemd-nspawn -D /var/lib/machines/fedora22 Spawning container fedora22 on /var/lib/machines/fedora22. Press ^] three times within 1s to kill container. -bash-4.3# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. -bash-4.3# logout Container fedora22 exited successfully.
Teraz możemy uruchomić kontener poprzez systemd:
# systemd-nspawn -b -D /var/lib/machines/fedora22 (...) [ OK ] Started Update UTMP about System Runlevel Changes. [ OK ] Started Cleanup of Temporary Directories. [ OK ] Started dnf makecache. Fedora release 22 (Twenty Two) Kernel 4.4.4-301.fc23.x86_64 on an x86_64 (console) fedora22 login:
Warto wspomnieć wspomnieć, że do administracji kontenerami służy polecenie „machinectl”:
# machinectl list MACHINE CLASS SERVICE qemu-fedora22 vm libvirt-qemu 1 machines listed.
Podsumowanie
Czy dziś nspawn może być poważną konkurencją dla Dockera? W tej chwili nie, ale otwartość kodu otwartego może przyspieszyć jego rozwój. A że jest on ściśle związany z samym systemem, to warto obserwować jego ewolucję.