🐳 Docker: Contenedores y Entornos Reproducibles para Desarrolladores
El Fin del "En Mi Máquina Sí Funciona"
Docker empaqueta aplicaciones junto con todas sus dependencias, librerías del sistema y configuraciones en unidades estandarizadas llamadas contenedores. A diferencia de las máquinas virtuales pesadas, los contenedores comparten el kernel de Linux del host, arrancando en segundos y consumiendo una fracción mínima de recursos.
⚡ Conceptos Clave para el Día a Día
- Imagen (
Docker image): Plantilla inmutable de solo lectura que contiene el código fuente, entorno de ejecución y librerías. - Contenedor (
Docker container): Instancia viva y en ejecución de una imagen. - Dockerfile: Receta paso a paso para construir una imagen personalizada.
- Volúmenes y Bind Mounts: Mecanismo para persistir datos de bases de datos o sincronizar código fuente local en tiempo real con el contenedor (Hot Reload).
- Docker Compose: Herramienta para orquestar aplicaciones multicontenedor (Frontend + Backend + PostgreSQL + Redis) con un solo comando.
📋 Ejemplo: docker-compose.yml para Desarrollo Local
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=development
- DATABASE_URL=postgres://user:pass@db:5432/devdb
depends_on:
- db
db:
image: postgres:17-alpine
restart: unless-stopped
ports:
- "5432:5432"
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: devdb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:🧰 Comandos Esenciales de Docker
# Iniciar todos los servicios en segundo plano y ver logs
docker compose up -d
docker compose logs -f
# Detener todos los servicios y liberar redes
docker compose down
# Abrir una terminal interactiva dentro de un contenedor en ejecución
docker exec -it <container_id_o_nombre> /bin/sh
# Ver contenedores activos y consumo de memoria
docker ps
docker stats
# Limpieza profunda de contenedores detenidos, redes e imágenes huérfanas
docker system prune -a --volumes