Docker Compose es una herramienta de Docker que permite definir y gestionar múltiples contenedores como si fueran una sola aplicación. Es especialmente útil cuando tu proyecto necesita varios servicios que trabajen juntos, como una base de datos, un servidor web y un backend.
En lugar de manejar contenedores de manera manual con comandos individuales, Docker Compose utiliza un archivo de configuración (docker-compose.yml) para especificar cómo se deben construir, conectar y ejecutar todos los contenedores.
¿Qué resuelve Docker Compose?
- Múltiples contenedores: Si tienes varios servicios en contenedores separados, gestionarlos puede volverse complejo. Compose automatiza su coordinación.
- Configuración centralizada: Define toda tu aplicación en un solo archivo, facilitando la colaboración y el despliegue.
- Orquestación sencilla: Levanta todos los servicios con un solo comando, manteniéndolos conectados y sincronizados.
Analogía:
Imagina que estás organizando un concierto. Cada músico (contenedor) tiene su propio instrumento (aplicación o servicio), pero necesitan tocar juntos, con instrucciones claras de qué tocar y cuándo. Esta herramienta es como un director de orquesta que asegura que todo esté en armonía.
Cómo funciona Docker Compose
1. Archivo docker-compose.yml
Este archivo contiene toda la configuración necesaria para definir tu aplicación. Incluye:
- Servicios: Los contenedores que forman tu aplicación.
- Imágenes: Qué imágenes de Docker usar para cada servicio.
- Redes: Cómo se comunican los servicios entre sí.
- Volúmenes: Qué datos deben persistir incluso si los contenedores se detienen.
Ejemplo básico:
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
¿Qué hace este archivo?
- Define dos servicios: un servidor web (web) con Nginx y una base de datos MySQL( db).
- Expone el puerto 8080 del host para el servicio web.
- Configura una contraseña para la base de datos en el servicio db.
2. Comandos de Docker Compose
Esta herramienta proporciona comandos simples para gestionar toda la aplicación:
Levantar la aplicación:
docker compose up
Este comando construye y ejecuta todos los contenedores definidos en el archivo docker-compose.yml.
Parar la aplicación:
docker-compose down
Detiene todos los servicios y elimina los contenedores, redes y volúmenes asociados.
Ver servicios en ejecución:
docker-compose ps
Reiniciar un servicio:
docker-compose restart web
Beneficios de Docker Compose
- Facilidad de Uso: Maneja aplicaciones multicontenedor con pocos comandos.
- Reproducibilidad: Asegura que tu aplicación funcione igual en cualquier entorno.
- Aislamiento de Entornos: Puedes tener múltiples entornos (desarrollo, pruebas, producción) con configuraciones personalizadas.
- Escalabilidad: Puedes escalar servicios fácilmente agregando más instancias con un simple comando:
docker-compose up --scale web=3
Ejemplo Completo
Supongamos que tienes una aplicación que incluye:
- Un backend en Python con Flask.
- Una base de datos MySQL.
- Un servidor web con Nginx.
Archivo docker-compose.yml:
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
app:
build:
context: .
volumes:
- ./app:/app
command: python /app/app.py
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
¿Qué hace esto?
- web: Usa la imagen de Nginx y expone el puerto 8080.
- app: Construye el backend desde un Dockerfile en la carpeta actual, monta el código local y lo ejecuta.
- db: Configura una base de datos MySQL con una contraseña predefinida.
Levanta todo con un solo comando:
docker-compose up
¿Cuándo usarlo?
- Aplicaciones Multiservicio: Ideal para proyectos que necesitan múltiples contenedores (por ejemplo, frontend, backend y base de datos).
- Ambientes de Desarrollo: Crea entornos reproducibles para equipos de desarrollo.
- Automatización de Pruebas: Configura entornos de prueba consistentes con servicios como Selenium o bases de datos temporales.