solutions_
🐳 Docker

Docker: Contenedores vs VMs

Entiende la arquitectura de contenedores, por qué son más ligeros que las VMs y cómo funciona el ciclo de vida de una imagen.

🏗️ Arquitectura: Contenedor Docker vs Máquina Virtual
🐳 Docker — Contenedores
🌐 App A
⚙️ App B
↕ aislados con namespaces
Container Runtime (runc)
Docker Engine
Sistema Operativo Host (Linux Kernel)
🖥️ Hardware
✅ Comparten el kernel del SO host
✅ Inicio en milisegundos
✅ Tamaño: MB (imagen base Alpine = 5 MB)
✅ Miles de contenedores por servidor
💻 VM — Máquina Virtual
🌐 App A
OS invitado completo (Linux/Windows)
↕ VM 1
⚙️ App B
OS invitado completo
↕ VM 2
Hypervisor (VMware / KVM / Hyper-V)
Sistema Operativo Host
🖥️ Hardware
⚠️ Cada VM tiene su propio kernel
⚠️ Inicio en minutos
⚠️ Tamaño: GB (Ubuntu = 2-4 GB)
⚠️ Docenas de VMs por servidor
⚖️ Ventajas y desventajas
🐳 Docker — Pros
+Arranque instantáneo (<1 segundo)
+Imágenes muy pequeñas (MBs)
+Portabilidad total: dev = prod
+Orquestación con Kubernetes
+Docker Hub: miles de imágenes listas
Aislamiento menor que VMs
Solo corre apps Linux (en Linux host)
Seguridad requiere configuración extra
💻 VMs — Pros
+Aislamiento completo a nivel hardware
+Puede correr cualquier OS (Windows, BSD)
+Seguridad superior (kernel independiente)
+Ideal para software legacy
Inicio lento (1-5 minutos)
Alto consumo de RAM y disco
Difícil de escalar rápidamente
Overhead del hypervisor
🔄 Ciclo de vida de una imagen Docker
📝
Dockerfile
Define las instrucciones para construir la imagen
🔨
docker build
Genera la imagen capa por capa
📦
Imagen
Snapshot inmutable de capas del sistema
☁️
docker push
Sube al registry (Docker Hub, ECR, etc.)
⬇️
docker pull
Descarga en cualquier servidor
▶️
docker run
Instancia la imagen como contenedor activo
💻 Comandos esenciales
Construir imagen
docker build -t mi-app:1.0 .
Correr contenedor
docker run -d -p 8080:80 mi-app:1.0
Ver contenedores activos
docker ps
Ver logs
docker logs -f contenedor_id
Entrar al contenedor
docker exec -it contenedor bash
Detener y borrar
docker stop id && docker rm id
Listar imágenes
docker images
Compose (multi-servicio)
docker compose up -d