¡Hola developer 👋🏻! Aprende tres técnicas avanzadas de Docker Compose para organizar tus configuraciones de forma modular y reutilizable. Perfecto para proyectos que necesitan flexibilidad entre desarrollo y producción.
- Características
- Requisitos Previos
- Demo 1: Merge
- Demo 2: Extend
- Demo 3: Include
- Comparación
- Estructura del Proyecto
- Sígueme
- Merge: Combina múltiples archivos docker-compose para diferentes ambientes (desarrollo/producción)
- Extend: Hereda configuración de un servicio base para evitar duplicación de código
- Include: Modulariza tu configuración en archivos independientes y reutilizables
- Flexibilidad: Adapta tus servicios según el entorno sin tocar archivos base
- Reutilización: Organiza componentes (BD, cache, web) como módulos independientes
- Docker Desktop instalado (con Docker Compose incluido)
- Docker Compose v2.20+ (especialmente para la demo de
include) - Terminal/CMD con acceso a comandos docker
Para verificar tu versión:
docker compose versionCombina múltiples archivos de configuración. El override se aplica automáticamente en desarrollo, y puedes hacer un merge explícito para producción.
Servicios:
web: nginx (puerto 8080 en desarrollo, 80 en producción)db: postgres (solo en producción)
cd 1.merge
# Desarrollo: usa base + override automático
docker compose up -d
docker compose ps # web en puerto 8080
# Producción: merge explícito
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
docker compose ps # web en puerto 80, db presenteDiferencia clave: El archivo docker-compose.override.yml se aplica automáticamente si existe. Para otros merges (ej: producción), usa -f explícitamente.
# Ver configuración final
docker compose config
# Inspeccionar variables de entorno
docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' merge_demo-web-1Un servicio hereda configuración de otro usando extends. Ideal para reutilizar servicios base sin duplicación.
Servicios:
base-app: nginx (plantilla en base.yml)frontend: hereda de base-app, puerto 8080backend: hereda de base-app, puerto 8081
cd 2.extend
docker compose up -d
# Verás dos contenedores nginx en puertos diferentes
docker compose ps
# Ver configuración final
docker compose configDiferencia con Merge: Aquí heredamos un servicio específico (no archivos completos). Ambos frontend y backend reutilizan la misma imagen pero con configuraciones diferentes.
Esto tiene sentido cuando tienes varios servicios que comparten muchas configuraciones similares y quieres evitar la duplicación.
Incluye archivos compose completos como módulos reutilizables. Requiere Docker Compose v2.20+
Servicios:
web: nginx que orquesta tododb: PostgreSQL como módulo independientecache: Redis como módulo independiente
cd 3.include
docker compose up -d
# Ver todos los servicios
docker compose ps
# web, db, cache corren juntos
# Ver configuración final
docker compose config- El archivo principal (
docker-compose.yml) incluye módulos coninclude: - Cada módulo es un compose.yml independiente
- El
name(project name) se define endb/compose.ymly afecta todos los servicios - Los servicios se pueden referenciar entre módulos (ej:
webdepende dedb)
# Inspeccionar proyecto
docker network ls | grep include_demo # Red compartidaVentaja: Cada módulo (db, cache) es independiente y reutilizable. Puedes incluirlo en otros proyectos sin duplicar código.
| Característica | Merge | Extend | Include |
|---|---|---|---|
| Sintaxis | -f file1 -f file2 |
extends: en servicio |
include: global |
| Qué combina | Archivos completos | Servicios específicos | Archivos modulares |
| Herencia | No | Sí, un servicio hereda de otro | No |
| Nivel de aplicación | Archivo/proyecto | Servicio individual | Archivo/proyecto |
| Cuándo usarlo | Múltiples entornos (dev/prod) | Servicios con config común | Organizar en módulos por función |
| Requisitos | Docker Compose v1.0+ | Docker Compose v1.0+ | Docker Compose v2.20+ |
| Ejemplo de uso | Base + Override, Base + Prod | Web hereda de base | Cache + DB como módulos |
docker-compose-modular/
├── 1.merge/
│ ├── docker-compose.yml # Configuración base
│ ├── docker-compose.override.yml # Desarrollo (automático)
│ ├── docker-compose.prod.yml # Producción
│ └── README.md
├── 2.extend/
│ ├── base.yml # Plantilla de servicio
│ ├── docker-compose.yml # Frontend y Backend que heredan
│ └── README.md
├── 3.include/
│ ├── docker-compose.yml # Principal (web)
│ ├── db/
│ │ └── compose.yml # Módulo de base de datos
│ ├── cache/
│ │ └── compose.yml # Módulo de cache
│ └── README.md
└── README.md (este archivo)
Si te ha gustado este proyecto y quieres ver más contenido como este, no olvides suscribirte a mi canal de YouTube y seguirme en mis redes sociales: