Estructura y plantilla de Docker Compose YAML

Clase 26 de 34Curso de Docker Avanzado

Resumen

Domina la estructura YAML de Docker Compose y conviértela en una plantilla reutilizable para desplegar desde uno hasta cien contenedores sin fricción. Aquí verás cómo definir servicios, puertos, volúmenes, variables de ambiente, redes y el parámetro depends_on para un arranque ordenado y confiable.

¿Cómo estructurar un YAML de Docker Compose paso a paso?

La base es clara: el archivo YAML organiza todo en secciones que describen tu mini orquestación. Desde la versión (hoy ya opcional desde 3.8), hasta los services, networks y volumes. La indentación es crítica: cualquier desalineación rompe la definición.

¿Qué incluye la sección services?

  • Nombre del servicio único y descriptivo.
  • Imagen remota o local: puedes usar una image pública sin pasos previos.
  • Construcción local: usa build con Dockerfile en la carpeta actual.
  • Puertos: mapeo entre host, Docker y contenedor.
  • Volúmenes: persistencia y montaje de carpetas/archivos.
  • Variables de ambiente: configuración clara por servicio.
  • depends_on: arranque condicionado a otros servicios.
# docker-compose.yml
# version: '3.8'  # opcional; ya no es requerida
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:80"
    volumes:
      - ./:/app
    environment:
      - APP_ENV=prod
    depends_on:
      - db
      - cache
      - proxy

  proxy:
    image: public/imagen:tag
    ports:
      - "80:80"
    networks:
      - app_net

  db:
    image: public/imagen-db:tag
    volumes:
      - db_data:/var/lib/data
    networks:
      - app_net

  cache:
    image: public/imagen-cache:tag
    networks:
      - app_net

networks:
  app_net: {}

volumes:
  db_data: {}

¿Qué ventajas aportan servicios, volúmenes y variables de ambiente?

Definir todo en Compose es más presentable y mantenible que encadenar banderas en docker run. Además, Compose descarga automáticamente imágenes públicas cuando no existen localmente, reduciendo pasos manuales.

¿Por qué mejora tu flujo de trabajo?

  • Legibilidad superior: configuración declarativa y ordenada.
  • Repetibilidad: se ejecuta igual en distintos entornos.
  • Persistencia con volúmenes nombrados como db_data.
  • Configuración centralizada con variables de ambiente por servicio.
  • Escalabilidad: funciona para uno o muchos contenedores.

¿Cómo usar redes y depends_on para orquestar contenedores?

Con networks creas una red común y su configuración se propaga a los contenedores que la usan. Esto facilita la comunicación interna y reduce errores. Con depends_on, garantizas que un servicio dependiente no arranque hasta que sus dependencias estén listas y ejecutándose, evitando fallos por orden de inicio.

¿Cómo convertirlo en una plantilla confiable?

  • Guarda y reutiliza este archivo como template de referencia.
  • Imprímelo o consérvalo en formato digital para consulta rápida.
  • Ajusta nombres de servicios, puertos y volúmenes según el proyecto.
  • Mantén la indentación alineada para evitar errores sutiles.
  • Agrega redes y volúmenes según el crecimiento del entorno.

¿Tienes dudas o un caso de uso particular con Compose? Comenta cómo organizarías tus servicios y qué te gustaría optimizar en tu template.