Docker Compose: Qué es, Para Qué Sirve

Docker Compose: Qué es, Para Qué Sirve

¿Qué es Docker Compose?

Defining and running multi-container Docker applications with Docker Compose  | by Chamod Shehanka Perera | FAUN — Developer Community 🐾

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?

  1. Simplifica la configuración del entorno de desarrollo: Puedes definir todos los servicios necesarios en un solo archivo.

  2. Automatiza la ejecución de múltiples contenedores: Un solo comando (docker-compose up) puede iniciar todo tu stack de servicios.

  3. Portabilidad: Puedes compartir el archivo docker-compose.yml con tu equipo para replicar fácilmente el entorno.

  4. Integración CI/CD: Facilita el despliegue en entornos de integración continua al tener predefinido el ecosistema de contenedores.

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

Referencias

Facebook
X
LinkedIn
Reddit
Pinterest
Threads

Post relacionados

Post recientes

Search