docker-compose

Qué es y cómo usar Docker Compose

  • 4 min

Docker Compose es una herramienta de orquestación de contenedores diseñada para definir, configurar y ejecutar aplicaciones de múltiples servicios mediante un único archivo de configuración en formato YAML.

Hasta este punto del curso, hemos sido unos artesanos de la terminal. Para levantar una aplicación web completa (digamos, un WordPress con su base de datos), teníamos que hacer varias acciones:

  1. Crear una red manual: docker network create...
  2. Lanzar la base de datos: docker run -d --name db --network... -e PASSWORD...
  3. Lanzar el WordPress: docker run -d -p 80:80 --network... -e DB_HOST...

Y si nos equivocamos en una de ellas, en una variable o en el orden, tenías que empezar de cero.

Aquí entra Docker Compose. La herramienta que nos permite dejar de ejecutar órdenes sueltas y empezar a definir nuestra arquitectura completa en un solo archivo.

¿Qué es Docker Compose?

Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores.

En lugar de usar la CLI (línea de comandos) para lanzar cada contenedor por separado, utilizamos un archivo YAML (llamado docker-compose.yml) donde escribimos toda la configuración de nuestros servicios.

Con un solo comando (docker compose up), Docker lee ese archivo y automáticamente:

  1. Crea las redes necesarias.
  2. Crea los volúmenes.
  3. Arranca todos los contenedores en el orden correcto.
  4. Conecta todo entre sí.

Infraestructura como código (IaC)

Al hablar de Dockerfile ya vimos el concepto de Infrastructure as Code. Esto es llevarlo un pasito más allá.

Con el Docker Compose, pasamos de una aproximación imperativa, a declarativa. ¿Lo qué? Esto 👇

  • Imperativo (Antes): Le dices a la máquina qué hacer paso a paso. “Descarga esto, luego crea la red, luego abre el puerto…”. Si te saltas un paso, falla.
  • Declarativo (Docker Compose): Le describes a la máquina el estado deseado final. “Quiero un sistema que tenga un WordPress y un MySQL conectados”. Docker se encarga de calcular los pasos necesarios para llegar a ese estado.

Ventajas de tener tu infraestructura en un archivo

¿Aún te parecen pocas ventajas lo del IaC? Aquí tienes algunas más.

  1. Versionado (Git): Al ser un archivo de texto (.yml), puedes subir tu docker-compose.yml a GitHub. Tienes historial de cambios de tu infraestructura igual que de tu código.
  2. Reproducibilidad: Tu compañero se baja el repositorio, hace docker compose up y tiene exactamente el mismo entorno que tú.
  3. Documentación: El archivo describe perfectamente qué puertos se usan, qué volúmenes se montan y qué contraseñas (variables) se necesitan.

¿Cómo se ve un archivo docker-compose.yml?

Aunque profundizaremos en la sintaxis en el siguiente artículo, vamos a ver un ejemplo para que veas lo cómodo que es.

Así se ve un entorno completo de WordPress + Base de Datos:

version: '3.8'

services:
  base-datos:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secreto
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    depends_on:
      - base-datos

volumes:
  db_data:
Copied!

¿Ves lo claro que es?

  • Tenemos dos servicios: base-datos y wordpress.
  • Vemos claramente qué imagen usa cada uno.
  • Vemos que WordPress depende de la base de datos.
  • Vemos que el puerto 8080 está abierto.

Los comandos

Una vez tienes este archivo de Docker Compose, ussarlo es muy sencillo. Únicamente necesitas dos comandos simples:

Encender todo (up)

docker compose up -d
Copied!

El flag -d (Detached) sigue funcionando aquí. Docker leerá el archivo, bajará las imágenes, creará redes y levantará todo en segundo plano.

Apagar y limpiar todo (down)

docker compose down
Copied!

Esto no solo para los contenedores (como stop), sino que borra los contenedores y las redes que creó. Deja tu sistema limpio. (Nota: Por seguridad, no borra los volúmenes de datos a menos que se lo pidas explícitamente).

Docker Compose vs Docker Swarm / Kubernetes

En la orquestación de contenedores hay muchas herramientas, y es normal confundir entre ellas.

  • Docker Compose: Es para orquestar contenedores en un solo nodo (tu ordenador o un servidor VPS). Es perfecto para desarrollo, testing y producciones pequeñas/medianas.
  • Kubernetes / Swarm: Son para orquestar contenedores en un clúster de muchos servidores.

Para el 99% de los desarrolladores y proyectos personales, Docker Compose es todo lo que necesitas.