Guías
DevOps Actualizado el 6 de noviembre de 2026

Docker Compose

Orquesta varios contenedores con Docker Compose v2: comandos, compose.yaml, variables de entorno, perfiles, overrides, redes y volúmenes.

  • #docker
  • #compose
  • #contenedores
  • #devops

Ciclo de vida

AcciónComando
Levantar todos los servicios en segundo plano
Levantar reconstruyendo las imágenes
Detener y eliminar contenedores y redes
Detener y borrar también los volúmenes
Reiniciar un servicio
Ver el estado de los servicios

Logs y ejecución

AcciónComando
Seguir los logs de un servicio
Ver las últimas 50 líneas de todos
Abrir una shell en un servicio en marcha
Ejecutar un comando puntual en un contenedor nuevo
Abrir psql en el servicio de base de datos

Imágenes y configuración

AcciónComando
Construir las imágenes de los servicios
Construir sin caché
Descargar las imágenes más recientes
Ver la configuración final ya interpolada
Sincronizar cambios de código en vivo (requiere develop.watch)

Estructura de compose.yaml

yaml
services:
  api:
    build: .
    ports:
      - "3000:3000"
    env_file: .env
    environment:
      DATABASE_URL: postgres://app:${DB_PASSWORD}@db:5432/app
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  db:
    image: postgres:17
    environment:
      POSTGRES_USER: app
      POSTGRES_DB: app
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d app"]
      interval: 5s
      timeout: 3s
      retries: 5

volumes:
  pgdata:

No uses la clave version:: está obsoleta y Compose la ignora. depends_on con service_healthy espera a que el healthcheck de db pase antes de arrancar api.

Variables de entorno

MecanismoDescripción
.envSe lee automáticamente junto a compose.yaml y alimenta la interpolación ${VAR} del archivo.
env_file: .envInyecta las variables del archivo dentro del contenedor.
environment:Define variables del contenedor directamente en el servicio.
${VAR:-default}Usa default si VAR no existe o está vacía.
${VAR:?mensaje}Falla con mensaje si VAR no está definida.
--env-file prod.envUsa otro archivo para la interpolación: docker compose --env-file prod.env up -d.

Nunca subas .env con secretos al repositorio: versiona un .env.example con placeholders.

Perfiles

Asigna servicios opcionales a un perfil; solo arrancan si activas ese perfil.

yaml
services:
  adminer:
    image: adminer
    ports:
      - "8081:8080"
    profiles: [tools]
AcciónComando
Levantar incluyendo el perfil tools
Activar perfiles por variable de entorno

Overrides y varios archivos

  • compose.override.yaml se combina automáticamente con compose.yaml al ejecutar docker compose up. Úsalo para ajustes locales (puertos, bind mounts).
  • Con -f eliges los archivos de forma explícita; los posteriores sobrescriben a los anteriores.
AcciónComando
Combinar base y producción
Revisar el resultado de la combinación
Usar otro nombre de proyecto

Redes y volúmenes

Compose crea una red por proyecto y cada servicio es accesible por su nombre (db:5432). Declara redes propias para aislar servicios:

yaml
services:
  api:
    networks: [backend, frontend]
  db:
    networks: [backend]

networks:
  backend:
  frontend:

volumes:
  pgdata:
    external: true   # created beforehand with docker volume create
AcciónComando
Listar los volúmenes del proyecto
Listar las redes creadas