← ← Volver a todas las notas

Virtualización en Linux: Guía Paso a Paso desde VMs hasta Contenedores (Basado en LPIC-1)

2025-11-27 · Benja

Guía práctica sobre virtualización en Linux que explica cómo funcionan las máquinas virtuales y los contenedores, sus diferencias, herramientas clave como KVM, Virt-Manager y Docker, y cómo aplicarlos en entornos locales y en la nube según estándares LPIC-1.

Virtualización en Linux: Guía Paso a Paso desde VMs hasta Contenedores (Basado en LPIC-1)

🏗️ Arquitectura Hexagonal: Más Allá de las Capas Tradicionales

Idea central: separar la lógica de negocio de la tecnología circundante (frameworks, bases de datos, protocolos, etc.). Las reglas del dominio gobiernan — todo lo demás obedece.

🎯 Introducción: Separando el Negocio del Circo Tecnológico

La Arquitectura Hexagonal — también conocida como Puertos y Adaptadores — no es solo otra forma elegante de decir "capas". Representa un cambio en cómo estructuramos aplicaciones que deben sobrevivir años, múltiples frameworks y varias "refactorizaciones de fe".

Propuesta por Alistair Cockburn, aborda un problema recurrente: la lógica de negocio contaminada por preocupaciones de infraestructura como controladores, ORMs, SDKs, brokers de mensajes y bases de datos.

Problema típico en arquitecturas clásicas

  • Controladores que mezclan validación, SQL y reglas de negocio.
  • Casos de uso acoplados a frameworks específicos.
  • Pruebas que requieren la mitad de tu stack de infraestructura para ejecutarse.
  • Refactorizaciones más aterradoras que eliminar logs de producción.
El dominio vive en el centro, aislado, puro y soberano. Todo lo demás orbita alrededor de él.

🏗️ Conceptos Fundamentales

  • Dominio: Reglas de negocio, agnósticas al framework.
  • Puertos: Contratos que definen lo que el sistema necesita o expone.
  • Adaptadores: Implementaciones que conectan con el mundo exterior.

⚡ Implementación Práctica: Sistema de Gestión de Pedidos

src/
├── domain/
│   ├── entities/
│   ├── value-objects/
│   ├── repositories/
│   └── services/
├── application/
│   ├── use-cases/
│   ├── ports/
│   └── dtos/
├── infrastructure/
│   ├── web/
│   ├── persistence/
│   └── messaging/
└── main.ts

🧠 Capa de Dominio

El dominio contiene la inteligencia. Las reglas son autocontenidas y resilientes.

🧩 Objetos de Valor

Encapsulan validación e inmutabilidad para conceptos atómicos como Email o Money.

🚪 Puertos

Interfaces que definen puntos de interacción del sistema sin exponer implementación.

🎯 Casos de Uso

Coordinan operaciones del dominio y aplican flujos de trabajo.

🧱 Adaptadores

Implementaciones concretas: controladores REST, repositorios ORM, APIs externas.

🧪 Pruebas

  • Pruebas rápidas a nivel de dominio
  • Pruebas de aplicación con mocks
  • Pruebas de integración robustas

📊 Beneficios Medibles

Cobertura de pruebas:   30% → 85%
Frecuencia de despliegue: 1/semana → 5/día
Tasa de defectos:     15% → 2%

🚀 Estrategia de Migración

  • Extraer el dominio
  • Aislar casos de uso
  • Implementar adaptadores

✅ Cuándo usar Arquitectura Hexagonal

  • Sistemas empresariales complejos
  • Aplicaciones escalables a largo plazo
  • Equipos que priorizan la mantenibilidad

❌ Cuándo evitar

  • MVPs rápidos
  • CRUDs simples
  • Prototipos con limitaciones de tiempo

La Arquitectura Hexagonal no es un fin, sino un medio para crear sistemas de software sostenibles que evolucionen sin miedo. Menos dependencias, más control y significativamente menos pesadillas de producción a las 3 AM.

🖥️ Virtualización en Linux: Guía Paso a Paso desde VMs hasta Contenedores

¿Sabías que el 80% de las apps en producción corren en entornos virtualizados? En 2025, dominar VMs y contenedores es clave para escalar sin romper el banco. Inspirado en el Tema 102.6 de LPIC-1 v5.0, esta guía resume lo esencial con enfoques prácticos para devs y sysadmins.

Descripción General de la Virtualización

La virtualización es una tecnología que permite que una plataforma de software, llamada hipervisor, ejecute procesos que contienen un sistema informático completamente emulado. El hipervisor administra los recursos del hardware físico para máquinas virtuales (guests). Los hipervisores comunes en Linux incluyen Xen (bare-metal, Tipo 1), KVM (integrado en el kernel, Tipo 1/2) y VirtualBox (Tipo 2, requiere SO host).

Tipo Ejemplos Pros Contras Uso Ideal
Tipo 1 (Nativo) KVM, Xen Alto rendimiento, directo al hardware Configuración compleja Servidores en producción
Tipo 2 (Hosted) VirtualBox, VMware Fácil setup en desktop Overhead de SO host Testing local en laptops
Comparación entre virtualización con hipervisor y contenedores
Comparativa visual: virtualización tradicional con hipervisor (izquierda) vs. contenedores sobre un mismo kernel (derecha).

En Ubuntu, instala KVM con:

sudo apt update && sudo apt install -y qemu-kvm virt-manager libvirt-clients libvirt-daemon-system bridge-utils
sudo adduser $USER libvirt
sudo adduser $USER kvm

Lanza la interfaz gráfica con virt-manager.

Tipos de Máquinas Virtuales

Hay tres tipos principales: totalmente virtualizado (fully virtualized, requiere extensiones CPU como Intel VT-x), paravirtualizado (paravirtualized, usa drivers especiales para mejor rendimiento) e híbrido (combina ambos). Por ejemplo, con KVM, crea una VM básica:

# Instala y configura KVM
sudo apt update && sudo apt install -y qemu-kvm virt-manager
sudo adduser $USER libvirt
sudo adduser $USER kvm

# Lanza virt-manager (GUI)
virt-manager

En Virt-Manager, selecciona un ISO de Ubuntu, asigna CPU/RAM y boot via VNC. Prueba tu app en una VM aislada sin ensuciar tu host.

Lista de máquinas virtuales en Virt-Manager
Virt-Manager mostrando varias máquinas virtuales KVM en diferentes estados (running / shutoff).

Trabajando con Plantillas de Máquinas Virtuales

Las plantillas son VMs base con SO instalado y configuraciones básicas. Clona con virt-clone:

virt-clone --original mi-vm --name mi-vm-clon --file /var/lib/libvirt/images/mi-vm-clon.qcow2

Ahorra tiempo en CI/CD. Recuerda generar nuevo D-Bus Machine ID con dbus-uuidgen --ensure para evitar conflictos.

Implementación de Máquinas Virtuales en la Nube

En nubes como AWS o Google Cloud, usa imágenes base (AMIs en AWS). Exporta tu VM local a OVA y súbela. Checklist:

  • Configura claves SSH.
  • Usa Packer para automatizar imágenes.
  • Prueba con free tier de AWS Lightsail.

Ejemplo en AWS EC2: Lanza una instancia Ubuntu, asigna recursos y conecta via SSH.

Panel de AWS EC2 para lanzar una nueva instancia
Consola de AWS EC2: botón Launch instance para desplegar una nueva máquina virtual en la nube.

Contenedores: El Futuro Ligero de la Virtualización

Contenedores (Docker, LXC) comparten el kernel host, son más ligeros que VMs. Comparativa: VMs (OS completo, más aislamiento) vs. Contenedores (solo app, eficiencia). Instala Docker en Ubuntu:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo docker run hello-world

Contenedoriza apps como Redis o Django para Kubernetes.

Arquitectura de Docker: cliente, host y registry
Arquitectura básica de Docker: comandos del cliente, daemon en el host, imágenes, contenedores y registry remoto.

Ejercicios Prácticos y Resumen

Guiado: Crea una VM con Ubuntu y corre un contenedor dentro. Exploratorio: Compara rendimiento con htop.

Resumen: Virtualiza para escalar. Siguiente paso: Certifícate en LPIC-1. ¡Comparte tu setup en comentarios! ¿Quieres más guías LPIC? Suscríbete a Tech Noticias.

⚠️ Errores Comunes en la Virtualización en Linux

Al trabajar con virtualización en Linux, ya sea con KVM, VirtualBox o contenedores como Docker, es fácil caer en trampas comunes que pueden frustrar tu setup. Basado en experiencias reales de sysadmins y devs (incluyendo foros como Docker y Stack Overflow), aquí se listan los errores más frecuentes, sus síntomas y cómo evitarlos o corregirlos.

1. KVM no habilitado o CPU sin soporte de virtualización

Síntomas: Mensajes como Your CPU does not support KVM extensions o Virtualization support KVM is not enabled on host.

Solución: Verificar soporte y habilitar VT-x / AMD-V.
egrep -c '(vmx|svm)' /proc/cpuinfo
sudo modprobe kvm_intel  # o kvm_amd

2. Usuario no agregado a grupos libvirt o kvm

Síntomas: Errores Permission denied o unable to connect to libvirt.

Solución:
sudo adduser $USER libvirt
sudo adduser $USER kvm
newgrp libvirt

3. Problemas de red: bridges mal configurados

Las VMs no tienen conectividad externa.

virsh net-list --all
virsh net-start default
virsh net-autostart default
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

4. Sobrecarga de recursos

qemu-img create -f qcow2 mi-vm.qcow2 20G
qemu-img convert -O qcow2 -c mi-vm.qcow2 mi-vm-compacto.qcow2

5. Errores en Docker

sudo usermod -aG docker $USER
newgrp docker
sudo systemctl start docker

6. Migraciones fallidas

ssh-keygen -t rsa
ssh-copy-id user@otro-host
virsh migrate --live mi-vm qemu+ssh://otro-host/system