Skip to content

0GiS0/docker-compose-modular

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Docker Compose 🐙: Merge, Extend e Include explicados paso a paso 🚀

YouTube Channel Subscribers GitHub followers LinkedIn Follow X Follow


¡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.

Reutiliza y Modulariza: Técnicas Avanzadas de Docker Compose

📑 Tabla de Contenidos

✨ Características

  • 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

📋 Requisitos Previos

  • 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 version

Demo 1: Merge

Combina 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)

Uso Rápido

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 presente

Más Detalles

Diferencia 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-1

Demo 2: Extend

Un 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 8080
  • backend: hereda de base-app, puerto 8081

Uso Rápido

cd 2.extend
docker compose up -d

# Verás dos contenedores nginx en puertos diferentes
docker compose ps

# Ver configuración final
docker compose config

Más Detalles

Diferencia 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.


Demo 3: Include

Incluye archivos compose completos como módulos reutilizables. Requiere Docker Compose v2.20+

Servicios:

  • web: nginx que orquesta todo
  • db: PostgreSQL como módulo independiente
  • cache: Redis como módulo independiente

Uso Rápido

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

Más Detalles

  1. El archivo principal (docker-compose.yml) incluye módulos con include:
  2. Cada módulo es un compose.yml independiente
  3. El name (project name) se define en db/compose.yml y afecta todos los servicios
  4. Los servicios se pueden referenciar entre módulos (ej: web depende de db)
# Inspeccionar proyecto
docker network ls | grep include_demo  # Red compartida

Ventaja: Cada módulo (db, cache) es independiente y reutilizable. Puedes incluirlo en otros proyectos sin duplicar código.


Comparación

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

📁 Estructura del Proyecto

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)

🌐 Sígueme en Mis Redes Sociales

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:

YouTube Channel Subscribers GitHub followers LinkedIn Follow X Follow

About

Docker Compose 🐙: Merge, Extend e Include explicados paso a paso

Topics

Resources

Stars

Watchers

Forks

Contributors