Docker para desarrolladores: Contenedores que cambiarán tu workflow
Introducción
"Funciona en mi máquina" es probablemente la frase más frustrante en desarrollo de software. Docker resuelve este problema de raíz mediante contenedores: entornos aislados y reproducibles que funcionan igual en tu laptop, en producción, o en la máquina de tu compañero.
Conceptos básicos
Imágenes vs Contenedores
- Imagen: Plantilla inmutable con todo lo necesario para ejecutar una aplicación
- Contenedor: Instancia en ejecución de una imagen
Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Comandos esenciales
# Construir imagen
docker build -t mi-app .
# Ejecutar contenedor
docker run -p 3000:3000 mi-app
# Ver contenedores activos
docker ps
# Ver todos los contenedores
docker ps -a
# Detener contenedor
docker stop <container_id>
# Eliminar contenedor
docker rm <container_id>
# Ver imágenes
docker images
Docker Compose
Para aplicaciones multicontenedor, Docker Compose es tu mejor aliado.
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: myapp
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Casos de uso comunes
Entorno de desarrollo local
Evita instalar MongoDB, Redis, PostgreSQL directamente en tu sistema.
docker run -d -p 27017:27017 mongo:7
Testing
Ejecuta tests en contenedores limpios y aislados.
CI/CD
Consistencia entre entornos de build y producción.
Beneficios tangibles
- Reproducibilidad: Mismo entorno en todos lados
- Aislamiento: Conflictos de dependencias eliminados
- Rapidez: Levantas servicios en segundos
- Eficiencia: Más ligero que máquinas virtuales
- Escalabilidad: Fácil orquestar múltiples contenedores
Errores comunes
- No usar archivos .dockerignore
- Instalar dependencias en producción innecesarias
- No configurar healthchecks
- Exponer puertos sin necesidad
- No limpiar imágenes y contenedores no utilizados
Conclusión
Docker no es solo para DevOps. Es una herramienta fundamental para cualquier desarrollador que quiera trabajar de forma profesional y evitar los clásicos problemas de "funciona en mi máquina".
Referencias
- Documentación oficial de Docker
- Docker Hub (hub.docker.com)
- "Docker Deep Dive" por Nigel Poulton