Docker Compose: Qué es y cómo funciona

docker-compose

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?

  1. Múltiples contenedores: Si tienes varios servicios en contenedores separados, gestionarlos puede volverse complejo. Compose automatiza su coordinación.
  2. Configuración centralizada: Define toda tu aplicación en un solo archivo, facilitando la colaboración y el despliegue.
  3. 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

  1. Facilidad de Uso: Maneja aplicaciones multicontenedor con pocos comandos.
  2. Reproducibilidad: Asegura que tu aplicación funcione igual en cualquier entorno.
  3. Aislamiento de Entornos: Puedes tener múltiples entornos (desarrollo, pruebas, producción) con configuraciones personalizadas.
  4. 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:

  1. Un backend en Python con Flask.
  2. Una base de datos MySQL.
  3. 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?

  1. web: Usa la imagen de Nginx y expone el puerto 8080.
  2. app: Construye el backend desde un Dockerfile en la carpeta actual, monta el código local y lo ejecuta.
  3. db: Configura una base de datos MySQL con una contraseña predefinida.

Levanta todo con un solo comando:

docker-compose up

¿Cuándo usarlo?

  1. Aplicaciones Multiservicio: Ideal para proyectos que necesitan múltiples contenedores (por ejemplo, frontend, backend y base de datos).
  2. Ambientes de Desarrollo: Crea entornos reproducibles para equipos de desarrollo.
  3. Automatización de Pruebas: Configura entornos de prueba consistentes con servicios como Selenium o bases de datos temporales.

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *