Qué es
Docker es una plataforma que permite empaquetar una aplicación junto con todo lo que necesita para funcionar — código, librerías, configuraciones y los archivos base de un sistema operativo (sin el kernel) — en una imagen que se ejecuta como contenedor.
El resultado: la aplicación se comporta de forma consistente en la laptop del desarrollador, en el servidor de pruebas y en producción. Adiós a gran parte del clásico “funciona en mi máquina”.
El problema que resuelve
Antes de Docker, desplegar una aplicación era complejo porque:
- La laptop del dev tenía Python 3.9, el servidor tenía Python 3.7
- La librería X funcionaba en Linux pero no en Windows del mismo modo
- Configurar un nuevo servidor tardaba horas o días
Docker encapsula todo esto. Si funciona en el contenedor, funcionará igual en cualquier host compatible (misma arquitectura de CPU y un kernel adecuado).
Contenedor vs Máquina Virtual
| Característica | Máquina Virtual | Contenedor Docker |
|---|---|---|
| Peso | Gigabytes (incluye SO completo) | Megabytes (comparte el kernel del host) |
| Arranque | Minutos | Segundos o menos |
| Aislamiento | Fuerte (hardware virtualizado, kernel propio) | A nivel de proceso (comparte kernel) |
| Portabilidad | Limitada | Alta |
| Uso típico | Múltiples SOs en un servidor | Múltiples apps en el mismo SO |
Conceptos clave
Dockerfile
El “plano” de la imagen. Define qué imagen base usar, qué instalar y cómo arrancar la aplicación.
FROM node:24-slim
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY . .
CMD ["node", "server.js"]
Image (Imagen)
El resultado de “construir” un Dockerfile. Es inmutable — una plantilla.
Container (Contenedor)
Una instancia corriendo de una imagen. Puedes tener 10 contenedores del mismo servidor Node.js corriendo a la vez.
Docker Hub
El registro público de imágenes más conocido. Como una “tienda de apps” para contenedores — imágenes listas de MySQL, Nginx, Redis, etc.
Docker Compose
Para aplicaciones con múltiples servicios, Docker Compose define todo en un archivo:
services:
web:
build: .
ports:
- "3000:3000"
database:
image: postgres:17
environment:
POSTGRES_PASSWORD: secret
Un solo comando levanta toda la infraestructura: docker compose up.
Impacto en desarrollo moderno
Docker transformó cómo se construye software:
Para desarrolladores:
- Entorno de desarrollo idéntico al de producción
- Nuevos miembros del equipo productivos en minutos, no días
- Pruebas de integración con bases de datos reales, no mocks
Para operaciones:
- Despliegues predecibles y reversibles
- Escalado horizontal simplificado
- Múltiples versiones de la misma app corriendo en el mismo servidor
Para empresas:
- Menor costo de infraestructura (más densidad por servidor)
- Reducción de bugs causados por diferencias de entorno
- Base para Kubernetes y arquitecturas cloud-native
Docker y Kubernetes
Docker construye imágenes y corre contenedores. Kubernetes orquesta muchos contenedores a escala — los distribuye entre servidores, los reinicia si fallan, balancea carga entre ellos. Son complementarios: las imágenes construidas con Docker siguen el estándar OCI y Kubernetes las ejecuta con runtimes como containerd. Docker es el ladrillo, Kubernetes es la construcción.
Términos relacionados
- DevOps - Cultura y prácticas donde Docker es una herramienta central
- CI/CD - Los pipelines de integración continua usan Docker para builds reproducibles
- Microservices - Cada microservicio corre típicamente en su propio contenedor
- Kubernetes - Orquestador de contenedores a escala
Recursos adicionales:
- Docker - Documentación oficial
- Play with Docker - Entorno sandbox gratuito