Skip to main content

Docker Compose YAML

image.png

Estructura Básica

docker-compose.yml

version: '3.8'  # Versión del esquema (opcional en Compose v2+)

services:       # Define los contenedores (servicios)
  servicio1:    # Nombre del primer servicio
    image: nginx:latest  # Imagen Docker a usar
    ports:
      - "8080:80"        # Mapeo de puertos (host:contenedor)
    volumes:
      - ./app:/usr/share/nginx/html  # Montar un volumen
    environment:
      - ENV_VAR=valor    # Variables de entorno
    networks:
      - red-privada      # Conecta a una red

  servicio2:    # Otro servicio (ej: una base de datos)
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: contraseña
    volumes:
      - db_data:/var/lib/postgresql/data  # Volumen nombrado

volumes:        # Define volúmenes persistentes
  db_data:      # Nombre del volumen

networks:       # Define redes Docker
  red-privada:  # Nombre de la red
    driver: bridge  # Tipo de red (bridge, overlay, etc.)

Detalles de cada SecciónSecciones

1. version (Opcional)

  • Especifica la versión del formato de Docker Compose (ej: '3.8').

  • En versiones recientes (Compose v2+), puede omitirse.

2. services (Obligatorio)

Contiene la definición de cada contenedor (servicio) que compone la aplicación.

Propiedades comunes en un servicio:

Propiedad Descripción
image Imagen Docker a utilizar (ej: nginx:latest).
build Ruta a un Dockerfile para construir la imagen en lugar de usar una preexistente.
ports Mapeo de puertos ("HOST:CONTAINER"). Ej: "8080:80".
volumes Monta directorios o volúmenes (./local:/ruta/contenedor).
environment Variables de entorno (VAR=valor).
depends_on Dependencias entre servicios (ej: servicio2 espera a que servicio1 inicie).
networks Conecta el servicio a una red específica.
restart Política de reinicio (noalwayson-failureunless-stopped).

3. volumes (Opcional)

Define volúmenes persistentes para almacenar datos fuera de los contenedores:

volumes:
  db_data:  # Volumen nombrado (manejado por Docker)
  cache:    # Puede tener configuraciones adicionales
    driver: local

4. networks (Opcional)

Configura redes personalizadas para la comunicación entre contenedores:

networks:
  red-privada:    # Red personalizada
    driver: bridge
  otra-red:
    external: true  # Usa una red existente en Docker (no creada por Compose)

Ejemplo Avanzado (Con Proxy y BD)

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - proxy
    labels:
      - "traefik.http.routers.web.rule=Host(`app.example.com`)"

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: admin123
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - backend

volumes:
  db_data:

networks:
  proxy:
    external: true  # Red existente (para Traefik/Nginx)
  backend:
    driver: bridge   # Red aislada para la base de datos

Comandos 

Comando Descripción
docker-compose up -d Inicia los servicios en segundo plano.
docker-compose down Detiene y elimina contenedores, redes y volúmenes.
docker-compose logs Muestra los logs de los servicios.
docker-compose ps Lista los contenedores en ejecución.

Conclusión

Un manifiesto YAML de Docker Compose permite:

  • Orquestrar múltiples contenedores (servicios, redes, volúmenes).

  • Definir dependencias y configuraciones de forma declarativa.

  • Facilitar el despliegue en diferentes entornos (dev, prod).