Inicio > Gestión de paquetes y sistema > systemd-nspawn

systemd-nspawn: Ejecución de contenedores ligeros

systemd-nspawn, parte del proyecto systemd, es una herramienta para crear y ejecutar entornos de contenedores Linux aislados sin necesidad de máquinas virtuales. Es más potente que chroot y más ligero que las máquinas virtuales, utilizándose para configurar entornos de prueba, desarrollo y despliegue aislando sistemas.

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.


Comandos de la misma categoría