Introducción a la orquestación de contenedores con Docker Compose
La orquestación de contenedores es un componente clave en la estrategia DevOps y en la adopción de infraestructuras definidas por software. Docker Compose se ha consolidado como una herramienta ligera y potente para definir, gestionar y levantar entornos compuestos de múltiples contenedores. A diferencia de soluciones más pesadas (como Kubernetes), Compose ofrece una curva de aprendizaje rápida y una sintaxis declarativa basada en YAML.
¿Por qué Docker Compose
- Configuración sencilla: un único archivo docker-compose.yml centraliza todos los servicios.
- Aislamiento y dependencia: cada contenedor corre en su propia red y volumen.
- Escalabilidad: permite escalar servicios con un solo comando.
- Portabilidad: el mismo archivo funciona en máquina local, servidores de integración y entornos de producción ligeros.
Conceptos fundamentales
Servicios, redes y volúmenes
En Docker Compose, definimos bloques principales:
- services: conjunto de contenedores que cooperan (por ejemplo, app, base de datos).
- networks: redes virtuales que interconectan servicios de forma aislada.
- volumes: puntos de persistencia para datos que sobreviven al ciclo de vida del contenedor.
Estructura básica de docker-compose.yml
services:
web:
image: nginx:latest
ports:
– 80:80
networks:
– frontend
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
– db_data:/var/lib/mysql
networks:
– backend
networks:
frontend:
backend:
volumes:
db_data:
Instalación y puesta en marcha
Para instalar Docker Compose en sistemas basados en Linux, puede seguir la guía oficial:
Documentación oficial de Docker Compose
Plataforma | Comando de ejemplo |
---|---|
Linux | sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-(uname -s)-(uname -m) -o /usr/local/bin/docker-compose |
macOS | brew install docker-compose |
Windows | Descargar ejecutable desde GitHub |
Arquitectura de Docker Compose
Cómo funciona por debajo
Docker Compose actúa como una capa de abstracción para docker run, docker network y docker volume. Cuando ejecutamos
Compose lee el archivo YAML, crea las redes, volúmenes y contenedores en el orden correcto, y monitoriza los logs y estados.
Versiones de esquema
Las versiones 2.x y 3.x tienen diferencias en funcionalidades:
- 2.x: más granularidad en limitación de recursos.
- 3.x: orientado a Swarm, soporta deploy y estrategias de replicación.
Buenas prácticas y patrones de diseño
- Descomposición en microservicios: un servicio por contenedor.
- Variables de entorno: use .env para credenciales y parámetros de configuración.
- Perfiles: defina profiles para activar servicios opcionales (logs, métricas).
- Escalado: utilice docker-compose up –scale web=3 para instancias múltiples.
- Reutilización de configuraciones: use extends o múltiples archivos YAML y -f.
Casos de uso avanzados
Integración continua
Compose se integra con Jenkins, GitLab CI/CD o GitHub Actions. Un ejemplo en .gitlab-ci.yml:
– build
– test
build:
stage: build
script:
– docker-compose build
test:
stage: test
services:
– docker:dind
script:
– docker-compose up -d
– docker-compose exec sut pytest
Entornos multinodo con Swarm
Compose versión 3 junto a Docker Swarm permite desplegar stacks:
docker stack deploy -c docker-compose.yml mystack
Monitorización y registro
- Logs centralizados: combine docker-compose logs con soluciones como ELK o Grafana Loki.
- Healthchecks: configure healthcheck para reinicio automático en caso de fallo.
- Métricas: exponga puertos de Prometheus o use cAdvisor.
Conclusiones
Docker Compose es la puerta de entrada ideal a la orquestación de contenedores. Con su sintaxis clara y su flexibilidad, permite diseñar arquitecturas modulares y portables. Si bien no sustituye a soluciones como Kubernetes en entornos de gran escala, sí proporciona rapidez en despliegues de desarrollo, testing y producción ligera.
Para profundizar, consulte la guía completa en https://docs.docker.com/compose/
Leave a Reply