¿Qué es Docker Compose?

 ¿Qué es Docker Compose?

Docker Compose es una herramienta que te permite definir y ejecutar aplicaciones con múltiples contenedores Docker. Mientras que Docker se encarga de contenedores individuales, Compose se especializa en orquestar varios contenedores que trabajan juntos.

El Problema que Resuelve

Imagina que tienes una aplicación web que necesita:

  • Un contenedor para tu aplicación (Node.js/Python/etc.)

  • Un contenedor para la base de datos (MySQL/PostgreSQL)

  • Un contenedor para cache (Redis)

  • Un contenedor para el servidor web (Nginx)

Sin Docker Compose, tendrías que ejecutar manualmente:

bash
docker run -d --name database mysql
docker run -d --name redis redis
docker run -d --name app --link database --link redis mi-aplicacion
docker run -d --name nginx --link app nginx

Con Docker Compose, defines todo en un archivo y ejecutas un solo comando.

Cómo Funciona

1. Archivo docker-compose.yml

Creas un archivo YAML que describe todos los servicios, redes y volúmenes:

yaml
version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - app
  
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db
  
  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

2. Comandos Principales

bash
# Iniciar todos los servicios
docker-compose up

# Iniciar en segundo plano
docker-compose up -d

# Detener todos los servicios
docker-compose down

# Ver logs
docker-compose logs

# Listar contenedores en ejecución
docker-compose ps

# Ejecutar un comando en un servicio específico
docker-compose exec app bash

Características Clave

✅ Ventajas Principales

  • Configuración centralizada: Todo en un archivo YAML

  • Dependencias automáticas: Los servicios se inician en el orden correcto

  • Variables de entorno: Fácil configuración para diferentes entornos

  • Redes aisladas: Los servicios se comunican de forma segura

  • Volúmenes compartidos: Persistencia de datos

🔧 Casos de Uso Comunes

  • Entornos de desarrollo locales

  • Testing de aplicaciones multi-servicio

  • Staging environments

  • Aplicaciones pequeñas/moderadas en producción

Ejemplo Práctico: WordPress con MySQL

yaml
version: '3.8'
services:
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpresspass

  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpresspass
    depends_on:
      - db

volumes:
  db_data:

Docker Compose vs. Otras Herramientas

HerramientaCaso de Uso
Docker ComposeDesarrollo local, apps pequeñas
Docker SwarmClústeres pequeños-medianos
KubernetesProducción enterprise, alta escalabilidad

Versiones Recientes

  • Docker Compose V1: Escrito en Python

  • Docker Compose V2: Reescrito en Go, integrado con CLI Docker

  • Ahora se usa principalmente como docker compose (sin guión)

Conclusión

Docker Compose es esencial para desarrolladores porque:

  • Simplifica el trabajo con aplicaciones multi-contenedor

  • Facilita el onboarding de nuevos miembros del equipo

  • Permite versionar la configuración de infraestructura

  • Es perfecto para desarrollo y testing

Comentarios

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Instalar Docker en Ubuntu Server usando docker.io

Tutorial de Carpetas y Directorios en Ubuntu Linux