La virtualización y los contenedores son tecnologías que permiten ejecutar múltiples entornos aislados sobre un mismo hardware físico. Aunque a menudo se confunden, tienen enfoques distintos:
- Máquinas virtuales (VMs): emulan hardware completo, ejecutando un sistema operativo invitado independiente. Proporcionan un aislamiento fuerte, pero consumen más recursos.
- Contenedores: comparten el kernel del host, aislando procesos, redes y sistemas de archivos mediante namespaces y cgroups. Son ligeros y rápidos, ideales para desplegar aplicaciones.
30.1. Introducción
En el contexto de la administración de sistemas Linux, es fundamental conocer las herramientas más comunes:
- KVM/QEMU: virtualización completa basada en el kernel (Kernel-based Virtual Machine), gestionada con
virshyvirt-manager. - LXC: contenedores de sistema, similares a entornos completos pero compartiendo kernel.
- Docker: contenedores de aplicaciones, muy populares para microservicios.
El examen LFCS puede incluir tareas básicas de gestión de estos entornos: instalar KVM, crear una VM, gestionar su ciclo de vida, configurar redes virtuales, y trabajar con contenedores LXC o Docker.
Parte I: Virtualización con KVM/QEMU
30.2. ¿Qué es KVM/QEMU?
KVM es un módulo del kernel que permite que Linux actúe como hipervisor, aprovechando las extensiones de virtualización del procesador (Intel VT-x o AMD-V). QEMU es un emulador que puede usar KVM para ejecutar máquinas virtuales con rendimiento casi nativo. La gestión se realiza con libvirt y sus herramientas (virsh, virt-install, virt-manager).
30.3. Instalación de KVM y libvirt
Verificar que el hardware soporta virtualización:
egrep -c '(vmx|svm)' /proc/cpuinfo
Si el resultado es mayor que 0, el soporte existe.
Instalar paquetes..
Debian/Ubuntu:
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils
RHEL/CentOS/Fedora:
sudo yum install qemu-kvm libvirt virt-install bridge-utils
Habilitar e iniciar el servicio:
sudo systemctl enable --now libvirtd
Añadir usuario al grupo libvirt (o kvm) para gestionar sin sudo:
sudo usermod -aG libvirt $(whoami)
Cerrar sesión y volver a entrar para aplicar.
30.4. Herramientas de gestión
virsh: interfaz de línea de comandos para administrar dominios (VMs), redes, almacenamiento.virt-install: crear VMs desde línea de comandos.virt-manager: interfaz gráfica (requiere entorno gráfico).virt-viewer: consola gráfica de una VM.
30.5. Redes virtuales
libvirt crea una red virtual por defecto llamada default, normalmente con NAT hacia el host, usando un bridge virtual virbr0. Las VMs conectadas a esta red obtienen IP automáticamente (DHCP) y salen a Internet a través del host.
Para listar redes:
virsh net-list --all
virsh net-dumpxml default
30.6. Crear una máquina virtual
Con virt-install, ejemplo para instalar una VM con ISO:
sudo virt-install \
--name servidor1 \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/servidor1.qcow2,size=10,format=qcow2 \
--os-type linux \
--os-variant ubuntu20.04 \
--network network=default \
--graphics vnc \
--cdrom /ruta/iso/ubuntu.iso
--name: nombre de la VM.--ram: memoria en MB.--vcpus: número de CPUs virtuales.--disk: disco virtual (formato qcow2).--os-typey--os-variant: optimizaciones según SO.--network: red virtual.--graphics vnc: salida gráfica.--cdrom: ISO de instalación.
También se puede usar --location para instalación desde red, o --pxe.
30.7. Gestión del ciclo de vida con virsh
- Listar VMs:
virsh list --all - Iniciar:
virsh start servidor1 - Apagar:
virsh shutdown servidor1(envía ACPI) - Forzar apagado:
virsh destroy servidor1 - Suspender:
virsh suspend servidor1 - Reanudar:
virsh resume servidor1 - Reiniciar:
virsh reboot servidor1 - Eliminar VM (apagada):
virsh undefine servidor1 - Conectar a consola:
virsh console servidor1(requiere configuración de consola serie)
30.8. Almacenamiento
Los discos virtuales suelen ser archivos qcow2 en /var/lib/libvirt/images/. Se pueden crear y asociar con virsh:
virsh vol-create-as default disco_extra.qcow2 5G
virsh attach-disk servidor1 /var/lib/libvirt/images/disco_extra.qcow2 vdb --persistent
También se pueden usar pools de almacenamiento (virsh pool-list, virsh vol-list).
30.9. Clonación y plantillas
Se puede clonar una VM apagada:
virt-clone --original servidor1 --name servidor1-clon --auto-clone
Parte II: Contenedores LXC
30.10. ¿Qué es LXC?
LXC (Linux Containers) es un sistema de contenedores a nivel de sistema operativo, que permite ejecutar múltiples entornos Linux aislados pero compartiendo el kernel del host. Es más ligero que una VM pero menos aislado. LXC se gestiona con lxc-* y se apoya en cgroups y namespaces.
30.11. Instalación
En Debian/Ubuntu:
sudo apt install lxc lxc-templates
En RHEL/CentOS (EPEL puede ser necesario):
sudo yum install lxc lxc-templates
Verificar entorno: lxc-checkconfig.
30.12. Crear un contenedor
Usar una plantilla (por ejemplo, Debian o Ubuntu):
sudo lxc-create -n contenedor1 -t download -- -d ubuntu -r focal -a amd64
Esto descarga la imagen y crea el contenedor en /var/lib/lxc/contenedor1/.
30.13. Gestionar contenedores
- Listar:
sudo lxc-ls - Iniciar:
sudo lxc-start -n contenedor1 -d - Conectar a consola:
sudo lxc-attach -n contenedor1 - Detener:
sudo lxc-stop -n contenedor1 - Destruir:
sudo lxc-destroy -n contenedor1
30.14. Configuración
El archivo de configuración está en /var/lib/lxc/contenedor1/config. Ahí se definen redes, recursos y montajes.
Parte III: Contenedores Docker (aplicaciones)
30.15. Docker: contenedores de aplicaciones
Docker empaqueta aplicaciones con todas sus dependencias en imágenes ligeras. Aunque no siempre está en el temario LFCS, es útil conocerlo.
30.16. Instalación
- Debian/Ubuntu:
sudo apt install docker.io - RHEL/CentOS:
sudo yum install docker(odocker-cedesde repos oficiales)
Habilitar e iniciar:
sudo systemctl enable --now docker
30.17. Comandos esenciales
- Buscar imagen:
docker search nginx - Descargar imagen:
docker pull nginx - Ejecutar contenedor:
docker run -d --name web -p 8080:80 nginx - Listar contenedores:
docker ps,docker ps -a - Detener:
docker stop web - Iniciar:
docker start web - Eliminar contenedor:
docker rm web - Listar imágenes:
docker images - Eliminar imagen:
docker rmi nginx
30.18. Ejercicios prácticos
Instalar KVM/libvirt: Verifica soporte de virtualización. Instala KVM y libvirt. Habilita el servicio. Añade tu usuario al grupo
libvirt.Crear una máquina virtual: Descarga una ISO de una distribución ligera (Alpine, Debian netinst). Crea una VM con 1 GB RAM, 1 vCPU, disco de 5 GB, red
default. Usavirt-install. Una vez arrancada, gestiona su ciclo de vida convirsh(list, start, shutdown, destroy, undefine).Redes virtuales: Lista las redes con
virsh net-list. Inspecciona la reddefault. Crea una red aislada (virsh net-defineynet-start) y conecta una VM a ella.Almacenamiento: Crea un volumen de disco adicional y adjúntalo a una VM apagada. Verifica con
virsh domblklist.LXC: Instala LXC. Crea un contenedor Ubuntu usando
lxc-create -t download. Inícialo, accede a su consola y ejecuta algunos comandos. Detenlo y destrúyelo.Docker: Instala Docker. Descarga la imagen de nginx y ejecuta un contenedor exponiendo el puerto 8080. Prueba con
curl localhost:8080. Detén y elimina el contenedor.
30.19. Resumen y consejos para LFCS
- KVM/QEMU es la solución de virtualización nativa en Linux. La gestión con
virshes fundamental. - Las redes virtuales de libvirt facilitan la conexión de VMs; conoce al menos la red
defaulty cómo crear otras. - LXC proporciona contenedores de sistema; su gestión es simple con
lxc-*. - Docker es el estándar para contenedores de aplicaciones; los comandos básicos (
pull,run,ps,stop,rm) son imprescindibles. - En el examen, puedes encontrarte con tareas de creación y gestión de VMs o contenedores. Practica con
virsh,lxcydockeren un entorno de laboratorio.
Con esto has completado el bloque de virtualización y contenedores. En el siguiente capítulo aprenderás los fundamentos de Git para gestionar proyectos de manera eficiente, una herramienta esencial para el control de versiones.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
