Docker Compose YAML

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 (no, always, on-failure, unless-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).