Tutoriel Linux

Systemd-nspawn : test een Linux-container zonder Docker te installeren

Débutant4 min de lecture

U moet een Debian-pakket of -service isoleren voor een test, zonder Docker op de host te installeren. Als de machine al draait met systemd, systemd-nspawn is voldoende om een Linux-root in een testcontainer te starten.

De onderstaande methode gebruikt een wegwerp-Debian Bookworm-root, start de machine met een privé-netwerk en controleert vervolgens de status met machinectl. Het doel: testen zonder per ongeluk een service bloot te stellen, en daarna netjes stoppen.

Geïsoleerde Linux-container in een transparante kist op een testserver
Een geïsoleerde Debian-root om systemd-nspawn te testen zonder een service bloot te stellen.

Bereid de systemd-host voor voordat u de container start

Beperk deze procedure tot een recente systemd-host en een laboratorium-image. Op een externe server, behoud uw huidige SSH-sessie voordat u de container start.

Het privé-netwerk beperkt het risico tijdens de test, maar het snijdt ook directe toegang vanuit de container. Als uw test pakketten moet downloaden na de start, houd hier dan rekening mee voordat u deze optie kiest.

ps -p 1 -o comm=
systemctl --version
command -v systemd-nspawn
command -v machinectl

De eerste opdracht moet systemd tonen. Als systemd-nspawn of machinectl ontbreekt, installeer het pakket systemd-container op Debian of Ubuntu.

Voeg nspawn niet toe in een VM of container die al erg beperkt is om een fout te omzeilen. Kernelcapaciteiten en sommige mounts kunnen ontbreken, en de foutmelding is minder leesbaar dan op een normale systemd-host.

Maak een Debian-root voor testdoeleinden

De directory geplaatst onder /var/lib/machines wordt het bestandssysteem van de container. Gebruik een expliciete naam en wijs deze opdracht nooit naar een bestaande root, productie-mount of back-updirectory.

sudo apt update
sudo apt install debootstrap systemd-container
sudo install -d -m 0755 /var/lib/machines/debian-test
sudo debootstrap --variant=minbase bookworm 
  /var/lib/machines/debian-test https://deb.debian.org/debian

debootstrap downloadt een minimale Debian-basis vanaf de host. Het privé-netwerk is alleen van toepassing tijdens de opstart van de container, niet in deze creatiefase.

Deze scheiding voorkomt dat de eerste poging verandert in een service die bereikbaar is op het LAN. De root blijft gemakkelijk te verwijderen als de test niet lang hoeft te duren.

Start de machine met een privé-netwerk

Open een tweede sessie op de host voordat u start. De eerste houdt nspawn op de voorgrond, met zichtbare foutmeldingen.

sudo systemd-nspawn -M debian-test 
  -D /var/lib/machines/debian-test 
  --private-network --boot

De optie -M geeft de naam debian-test aan de machine. -D verwijst naar de net voorheen gemaakte root.

Met --private-network deelt de container de netstack van de host niet. Voor een eerste opstart biedt deze beperking een betere bescherming dan een per ongeluk blootgestelde testdaemon.

Controleer de machine met machinectl

Controleer vanaf de tweede sessie eerst of systemd de machine heeft geregistreerd. Voer vervolgens de shell binnen om te bevestigen dat u daadwerkelijk in de test-Debian bent.

machinectl list
sudo machinectl shell debian-test
cat /etc/os-release
exit

machinectl list moet debian-test tonen terwijl hij draait. In de shell moet cat /etc/os-release overeenkomen met de gekozen Debian Bookworm-basis.

Als de machine niet verschijnt, keer dan terug naar de nspawn-sessie. De boodschap die op de voorgrond wordt weergegeven, biedt een betrouwbaardere aanwijzing dan een willekeurige herstart.

  • Stop de container met sudo machinectl poweroff debian-test, of gebruik Ctrl+C in de nspawn-sessie als de opstart is mislukt.
  • Controleer vervolgens of machinectl list debian-test niet meer toont.
  • Verwijder de test-image pas na het stoppen: sudo rm -rf /var/lib/machines/debian-test.

De laatste opdracht verwijdert de hele root van de container. Bewaar de directory als u dezelfde test opnieuw wilt uitvoeren, maar behandel het niet als een productie basis zonder updates bij te houden.

Kies nspawn, Docker of Podman afhankelijk van de behoefte

Voor een complete, lokale en wegwerp Linux-machine is systemd-nspawn de meest directe keuze op een systemd-host. Het voorkomt dat u een Docker-stapel moet toevoegen alleen om een test-shell te openen.

Voor het bouwen van OCI-images, het integreren van een CI-pijplijn of het verplaatsen van dezelfde container tussen meerdere hosts zijn Docker of Podman geschikter. De behoefte is niet dezelfde.

De gids voor het installeren van Docker op Debian met controles behandelt deze andere benadering. Als uw test afhankelijk is van een service die bij de opstart wordt gestart, helpt de pagina om systemd-services te lezen om de status te controleren. De documentatie systemd-nspawn(1) op man7 gaat dieper in op de opties voor mounts en netwerken.