LXC (Linux Containers) es una tecnología de virtualización a nivel de sistema operativo que permite ejecutar múltiples sistemas Linux aislados en un solo host, utilizando un único kernel. A diferencia de las máquinas virtuales tradicionales que emulan hardware completo, LXC comparte el kernel del host pero brinda espacios de usuario completamente aislados.
¿Qué es LXC y cómo se diferencia de Docker?
LXC y Docker son tecnologías de contenedores, pero operan en niveles distintos. LXC crea contenedores del sistema (system containers) que se comportan como máquinas virtuales ligeras: tienen su propio init (systemd, sysvinit), permiten múltiples procesos y se administran de forma muy similar a un servidor completo. Docker, en cambio, está diseñado para contenedores de aplicación (app containers): ejecutan un solo proceso por contenedor, son efímeros y están optimizados para microservicios.
# Comparación rápida:
#
# LXC (system container): init systemd, múltiples procesos, SSH, similar a VM
# Docker (app container): un solo proceso, efímero, stateless, ideal para microservicios
#
# Ambos usan cgroups y namespaces de Linux bajo el capó.
Instalación de LXC y LXD
El ecosistema moderno de LXC se administra a través de LXD, un demonio y gestor de contenedores que proporciona una API REST, almacenamiento por ZFS/btrfs, perfiles, snapshots y clustering. La instalación es directa en la mayoría de distribuciones.
# En Ubuntu/Debian
sudo apt update
sudo apt install -y lxd lxd-client
# En CentOS/RHEL/Fedora
sudo dnf install -y lxd
# En Arch Linux
sudo pacman -S lxd
Una vez instalado, verifica que el servicio esté activo y que tu usuario pertenezca al grupo lxd para evitar usar sudo constantemente.
# Verificar el servicio
sudo systemctl status lxd
# Agregar tu usuario al grupo lxd (requiere reiniciar sesión)
sudo usermod -aG lxd $USER
# Verificar membresía
groups
Recomendamos reiniciar sesión después de agregar el grupo. Luego ejecuta lxd init para la configuración inicial del pool de almacenamiento, la red y el clustering.
Configuración inicial con lxd init
El comando lxd init guía al usuario a través de la configuración básica de LXD. Es interactivo y permite definir el backend de almacenamiento (ZFS, btrfs, dir, lvm), la red bridge por defecto (lxdbr0) y opciones de clustering.
sudo lxd init
# Ejemplo de respuestas típicas:
# ¿Usar clustering? → no
# ¿Pool de almacenamiento? → default
# ¿Backend? → dir (simple) o zfs (recomendado si hay soporte)
# ¿Red bridge? → sí (crea lxdbr0)
# ¿Repetir servidor? → no
Si usas ZFS como backend, asegúrate de tener espacio en disco suficiente y de que el kernel soporte ZFS (módulo zfs.ko o zfs-fuse). Para entornos simples, el backend dir funciona sin problemas adicionales.
Lanzar, inspeccionar y administrar contenedores
Con LXD configurado, puedes lanzar tu primer contenedor usando imágenes de los repositorios oficiales de imágenes de Linux Containers. El comando lxc launch descarga la imagen, crea el contenedor y lo inicia automáticamente.
# Lanzar un contenedor Ubuntu 24.04
lxc launch ubuntu:24.04 mi-primer-container
# Lanzar un contenedor Debian 12
lxc launch images:debian/12 mi-debian
# Listar contenedores activos y sus estados
lxc list
Con lxc exec puedes ejecutar comandos directamente dentro del contenedor, como si estuvieras haciendo SSH. También puedes obtener información detallada del contenedor con lxc info.
# Ejecutar comandos dentro del contenedor
lxc exec mi-primer-container -- bash
lxc exec mi-primer-container -- apt update
lxc exec mi-primer-container -- apt install nginx -y
# Obtener información del contenedor
lxc info mi-primer-container
# Ver información con recursos
lxc info mi-primer-container --resources
# Detener y eliminar
lxc stop mi-primer-container
lxc delete mi-primer-container
LXC es una herramienta poderosa para entornos de desarrollo, pruebas y producción ligera. En los próximos artículos exploraremos redes, almacenamiento, snapshots, perfiles y límites de recursos.
