Docker Compose: Qué es, Para Qué Sirve
¿Qué es Docker Compose?
Docker Compose es una herramienta que permite definir, configurar y ejecutar aplicaciones multicontenedor en Docker utilizando un solo archivo YAML (docker-compose.yml
). En lugar de iniciar cada contenedor manualmente, Docker Compose gestiona todo el entorno con un solo comando.
Se convierte en una solución esencial cuando una aplicación depende de varios servicios, como bases de datos, APIs, aplicaciones web y otros microservicios.
¿Por qué es importante Docker Compose?
Simplifica la configuración del entorno de desarrollo: Puedes definir todos los servicios necesarios en un solo archivo.
Automatiza la ejecución de múltiples contenedores: Un solo comando (
docker-compose up
) puede iniciar todo tu stack de servicios.Portabilidad: Puedes compartir el archivo
docker-compose.yml
con tu equipo para replicar fácilmente el entorno.Integración CI/CD: Facilita el despliegue en entornos de integración continua al tener predefinido el ecosistema de contenedores.
Escalabilidad local: Puedes escalar servicios con
docker-compose up --scale
.
¿Cuándo usar Docker Compose?
Docker Compose es ideal cuando:
Tienes múltiples servicios que necesitan comunicarse entre sí (por ejemplo: una API y una base de datos).
Necesitas simular un entorno de producción en desarrollo.
Deseas automatizar la configuración de servicios de backend y frontend.
Estás trabajando con microservicios.
Cómo usar Docker Compose
Requisitos Previos
Tener Docker y Docker Compose instalados. En sistemas modernos, Compose ya viene incluido con Docker Desktop.
Estructura del archivo docker-compose.yml
Este archivo define los servicios, redes, volúmenes y configuraciones necesarias para levantar la aplicación.
Ejemplo básico de estructura:
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
Comandos Básicos
docker-compose up
Inicia todos los servicios definidos en el archivo.docker-compose down
Detiene y elimina contenedores, redes y volúmenes.docker-compose build
Construye las imágenes necesarias antes de iniciar los contenedores.
Caso práctico: Aplicación Web con PostgreSQL
Escenario:
Estás desarrollando una API en Python Flask que necesita conectarse a una base de datos PostgreSQL.
Estructura del proyecto:
mi-app/
│
├── app.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml
Contenido de Dockerfile
:
FROM python:3.10-slim
WORKDIR /code
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Contenido de requirements.txt
:
flask
psycopg2-binary
Contenido de app.py
:
from flask import Flask
import psycopg2
app = Flask(__name__)
@app.route('/')
def hello():
return "¡Hola desde Flask con PostgreSQL!"
if __name__ == '__main__':
app.run(host='0.0.0.0')
Contenido de docker-compose.yml
:
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: flaskdb
Comando para levantar la aplicación:
docker-compose up
Al acceder a http://localhost:5000
, verás la respuesta del contenedor de Flask, y ya tendrás conectividad con la base de datos PostgreSQL.
Conclusión
Docker Compose es una herramienta clave para cualquier profesional DevOps o desarrollador moderno que trabaje con múltiples servicios en contenedores. Su simplicidad y eficiencia lo hacen ideal para entornos de desarrollo, pruebas, y hasta etapas iniciales de producción. Además, permite una colaboración más fluida entre equipos al estandarizar los entornos de ejecución.