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, sistema operativo base — en una unidad llamada contenedor.
El resultado: la aplicación funciona exactamente igual en la laptop del desarrollador, en el servidor de pruebas y en producción. Sin el 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, funciona en cualquier lado.
Contenedor vs Máquina Virtual
| Característica | Máquina Virtual | Contenedor Docker |
|---|---|---|
| Peso | Gigabytes (incluye SO completo) | Megabytes (comparte el SO del host) |
| Arranque | Minutos | Segundos |
| Aislamiento | Total (hardware emulado) | 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é SO base usar, qué instalar y cómo arrancar la aplicación.
FROM node:20
WORKDIR /app
COPY package.json .
RUN npm install
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 repositorio público de imágenes Docker. Como el “App Store” 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:15
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 crea y corre contenedores. Kubernetes orquesta muchos contenedores a escala — los distribuye entre servidores, los reinicia si fallan, balancea carga entre ellos. Son complementarios: 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 Docker a escala
Recursos adicionales:
- Docker - Documentación oficial
- Play with Docker - Entorno sandbox gratuito