Appearance
Docker Compose
Docker Compose permite definir y ejecutar aplicaciones formadas por varios contenedores mediante un archivo YAML, normalmente llamado compose.yaml. En él se describen los servicios, las redes, los volúmenes y su configuración.
Ejemplo: aplicación web y base de datos
El siguiente ejemplo ejecuta un servidor web Nginx y una base de datos PostgreSQL. Guarda el contenido como compose.yaml:
yaml
services:
web:
image: nginx:alpine
ports:
- "8080:80"
depends_on:
db:
condition: service_healthy
db:
image: postgres:17-alpine
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Define POSTGRES_PASSWORD en el archivo .env}
volumes:
- datos-postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d app"]
interval: 5s
timeout: 5s
retries: 5
volumes:
datos-postgres:Los servicios de Compose comparten una red por defecto y pueden encontrarse usando sus nombres. Por ejemplo, desde otro servicio de esta configuración, el host de PostgreSQL sería db. El volumen datos-postgres conserva los datos de la base de datos aunque se recree el contenedor.
depends_on con service_healthy espera a que la comprobación de salud de la base de datos tenga éxito antes de iniciar web. Esto controla el orden de arranque, pero no configura Nginx para conectarse a PostgreSQL.
Configurar variables de entorno
En el mismo directorio, crea un archivo .env que no se debe subir al control de versiones:
dotenv
POSTGRES_PASSWORD=pon_aqui_una_clave_localAñade .env a .gitignore. Usa secretos gestionados adecuadamente para producción; no guardes contraseñas reales en el archivo Compose ni en el repositorio.
Comandos habituales
Ejecuta estos comandos desde el directorio que contiene compose.yaml:
bash
docker compose up -d # Crear e iniciar los servicios en segundo plano
docker compose ps # Ver el estado de los servicios
docker compose logs -f # Seguir los registros
docker compose logs -f db # Seguir los registros de un servicio
docker compose exec db sh # Abrir una consola en el servicio db
docker compose stop # Detener los servicios sin eliminarlos
docker compose start # Iniciar los servicios detenidos
docker compose down # Detener y eliminar contenedores y redPara reconstruir las imágenes definidas con build después de cambiar su código o Dockerfile:
bash
docker compose up -d --buildImágenes propias
En lugar de usar una imagen publicada, un servicio puede construir su imagen desde un Dockerfile:
yaml
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"context indica los archivos disponibles durante la construcción y dockerfile permite especificar la ruta del Dockerfile relativa al contexto.
Persistencia y eliminación de datos
docker compose down elimina los contenedores y la red, pero conserva los volúmenes con nombre por defecto. Para borrar también los volúmenes del proyecto:
bash
docker compose down --volumesEsta opción elimina los datos persistidos, por lo que debe usarse solo cuando realmente se quieran borrar. Para consultar la configuración que Compose ha resuelto, incluida la sustitución de variables:
bash
docker compose config