🐳 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

🧭 Conexiones Internas