Descripción general
systemd-nspawn ejecuta contenedores compartiendo el kernel del sistema anfitrión, pero aislando el sistema de archivos, el árbol de procesos, la red, etc. Esto es útil para aislar de forma segura entornos de desarrollo y prueba, o para probar entornos de diferentes distribuciones.
Características principales
- Proporciona un entorno de contenedor ligero
- Comparte el kernel del anfitrión y eficiencia de recursos
- Aislamiento de sistema de archivos, procesos y red
- Funcionalidad de aislamiento más potente que chroot
- Soporte para arranque de contenedores basado en systemd
Opciones principales
Las opciones principales de systemd-nspawn controlan el comportamiento del contenedor, el nivel de aislamiento, la configuración de red, etc.
Configuración básica del contenedor
Configuración de red
Recursos y permisos
Comando generado:
Combina los comandos.
Descripción:
`systemd-nspawn` Ejecutando el comando.
Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.
Ejemplos de uso
Ejemplos de ejecución de varios entornos de contenedor utilizando systemd-nspawn.
Ejecución básica de contenedor (bash)
sudo systemd-nspawn -D /var/lib/machines/mycontainer /bin/bash
Inicia un contenedor con el sistema de archivos raíz especificado y ejecuta un shell bash.
Contenedor con arranque systemd
sudo systemd-nspawn -b -D /var/lib/machines/mycontainer
Inicia systemd como el primer proceso dentro del contenedor, proporcionando un entorno de sistema completo.
Contenedor con aislamiento de red
sudo systemd-nspawn --private-network -D /var/lib/machines/mycontainer /bin/bash
Ejecuta un contenedor sin interfaces de red para bloquear el acceso a la red externa.
Montaje de ruta del anfitrión bind
sudo systemd-nspawn -D /var/lib/machines/mycontainer --bind=/home/user/data:/mnt/data /bin/bash
Monta el directorio /home/user/data del anfitrión en /mnt/data dentro del contenedor.
Conexión de red con Ethernet virtual
sudo systemd-nspawn -D /var/lib/machines/mycontainer --network-veth /bin/bash
Crea una interfaz Ethernet virtual entre el anfitrión y el contenedor para establecer la conexión de red.
Instalación
systemd-nspawn se proporciona como parte del paquete `systemd-container`. En la mayoría de las distribuciones Linux basadas en systemd, está instalado por defecto o se puede instalar fácilmente.
Debian/Ubuntu
sudo apt update && sudo apt install systemd-container
Instala el paquete systemd-container utilizando el gestor de paquetes apt.
Fedora/RHEL/CentOS
sudo dnf install systemd-container
Instala el paquete systemd-container utilizando el gestor de paquetes dnf.
Arch Linux
sudo pacman -S systemd-container
Instala el paquete systemd-container utilizando el gestor de paquetes pacman.
Consejos y precauciones
Consejos y precauciones para utilizar systemd-nspawn de manera efectiva.
Consejos principales
- **Se requieren privilegios de root**: systemd-nspawn accede a los recursos del sistema, por lo que debe ejecutarse con `sudo` o privilegios de root.
- **Preparación de la imagen del contenedor**: El sistema de archivos raíz del contenedor debe estar preparado de antemano. Se puede crear utilizando herramientas como `debootstrap`, `dnf --installroot`, `pacstrap`, etc.
- **Comprender la configuración de red**: `--network-veth` permite la comunicación entre el anfitrión y el contenedor, mientras que `--private-network` aísla completamente el contenedor. Elija la opción adecuada según su propósito.
- **Consideraciones de seguridad**: Aunque systemd-nspawn proporciona un aislamiento robusto, comparte el kernel del anfitrión, lo que lo hace potencialmente más vulnerable a exploits que soluciones de virtualización completa como Docker. Tenga cuidado al ejecutar código no confiable.