Qué es Docker Compose
Casi ninguna aplicación real vive sola: necesitas una base de datos, un caché, quizás un worker de colas y un servidor web. Lanzar cada contenedor con docker run y sus mil flags es tedioso y propenso a errores. Docker Compose resuelve esto definiendo todo tu stack en un único archivo YAML declarativo.
El archivo docker-compose.yml
Compose agrupa los contenedores en servicios, los conecta mediante networks y persiste datos con volumes. Un archivo básico para WordPress con MySQL se ve así:
services:
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: rootsecret
MARIADB_DATABASE: wordpress
MARIADB_USER: wpuser
MARIADB_PASSWORD: wppass
volumes:
- db_data:/var/lib/mysql
networks:
- backend
wordpress:
image: wordpress:6-php8.2-apache
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
volumes:
- wp_data:/var/www/html
networks:
- backend
volumes:
db_data:
wp_data:
networks:
backend:
Comandos esenciales
Coloca el archivo en una carpeta y ejecuta los comandos desde ahí:
docker compose up -d: construye (si aplica) y levanta todos los servicios en segundo plano.docker compose ps: muestra el estado de cada servicio.docker compose logs -f wordpress: sigue los logs de un servicio específico.docker compose exec db mariadb -uroot -p: abre una sesión dentro del contenedor de base de datos.docker compose restart wordpress: reinicia un servicio sin tocar los demás.docker compose down: detiene y elimina contenedores y redes (los volúmenes persisten).docker compose down -v: elimina también los volúmenes (¡borra la base de datos!).
Persistencia de datos
La regla de oro: los contenedores son efímeros, los datos deben vivir en volúmenes. En el ejemplo anterior, MariaDB guarda sus archivos en el volumen db_data. Puedes destruir el contenedor db mil veces y los datos seguirán ahí cuando lo vuelvas a crear. Lo mismo aplica a wp_data, que guarda la carpeta wp-content.
Variables de entorno y archivos .env
Es buena práctica sacar las contraseñas del YAML y ponerlas en un archivo .env a la par del compose:
DB_ROOT_PASSWORD=rootsecret
DB_USER=wpuser
DB_PASSWORD=wppass
Luego referencias las variables con ${DB_PASSWORD} en el YAML. Agrega el .env a tu .gitignore para no subir secretos al repositorio.
Ventajas frente a scripts manuales
Con un solo archivo cualquier persona del equipo puede levantar el entorno idéntico al tuyo en segundos. Además, Compose crea automáticamente una red privada donde los servicios se encuentran por nombre: WordPress usa db como hostname porque Compose resuelve ese nombre al contenedor correcto. Adiós a buscar IPs.
Docker Compose es el puente natural entre ejecutar un contenedor suelto y trabajar con orquestadores más complejos como Kubernetes.