DevOps
Actualizado el 6 de noviembre de 2026
Docker Compose
Orquesta varios contenedores con Docker Compose v2: comandos, compose.yaml, variables de entorno, perfiles, overrides, redes y volúmenes.
- #docker
- #compose
- #contenedores
- #devops
Ciclo de vida
| Acción | Comando |
|---|---|
| Levantar todos los servicios en segundo plano | |
| Levantar reconstruyendo las imágenes | |
| Detener y eliminar contenedores y redes | |
| Detener y borrar también los volúmenes | |
| Reiniciar un servicio | |
| Ver el estado de los servicios |
Logs y ejecución
| Acción | Comando |
|---|---|
| Seguir los logs de un servicio | |
| Ver las últimas 50 líneas de todos | |
| Abrir una shell en un servicio en marcha | |
| Ejecutar un comando puntual en un contenedor nuevo | |
| Abrir psql en el servicio de base de datos |
Imágenes y configuración
| Acción | Comando |
|---|---|
| Construir las imágenes de los servicios | |
| Construir sin caché | |
| Descargar las imágenes más recientes | |
| Ver la configuración final ya interpolada | |
Sincronizar cambios de código en vivo (requiere develop.watch) |
Estructura de compose.yaml
yaml
services:
api:
build: .
ports:
- "3000:3000"
env_file: .env
environment:
DATABASE_URL: postgres://app:${DB_PASSWORD}@db:5432/app
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:17
environment:
POSTGRES_USER: app
POSTGRES_DB: app
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d app"]
interval: 5s
timeout: 3s
retries: 5
volumes:
pgdata:No uses la clave version:: está obsoleta y Compose la ignora. depends_on con service_healthy espera a que el healthcheck de db pase antes de arrancar api.
Variables de entorno
| Mecanismo | Descripción |
|---|---|
.env | Se lee automáticamente junto a compose.yaml y alimenta la interpolación ${VAR} del archivo. |
env_file: .env | Inyecta las variables del archivo dentro del contenedor. |
environment: | Define variables del contenedor directamente en el servicio. |
${VAR:-default} | Usa default si VAR no existe o está vacía. |
${VAR:?mensaje} | Falla con mensaje si VAR no está definida. |
--env-file prod.env | Usa otro archivo para la interpolación: docker compose --env-file prod.env up -d. |
Nunca subas .env con secretos al repositorio: versiona un .env.example con placeholders.
Perfiles
Asigna servicios opcionales a un perfil; solo arrancan si activas ese perfil.
yaml
services:
adminer:
image: adminer
ports:
- "8081:8080"
profiles: [tools]| Acción | Comando |
|---|---|
Levantar incluyendo el perfil tools | |
| Activar perfiles por variable de entorno |
Overrides y varios archivos
compose.override.yamlse combina automáticamente concompose.yamlal ejecutardocker compose up. Úsalo para ajustes locales (puertos, bind mounts).- Con
-feliges los archivos de forma explícita; los posteriores sobrescriben a los anteriores.
| Acción | Comando |
|---|---|
| Combinar base y producción | |
| Revisar el resultado de la combinación | |
| Usar otro nombre de proyecto |
Redes y volúmenes
Compose crea una red por proyecto y cada servicio es accesible por su nombre (db:5432). Declara redes propias para aislar servicios:
yaml
services:
api:
networks: [backend, frontend]
db:
networks: [backend]
networks:
backend:
frontend:
volumes:
pgdata:
external: true # created beforehand with docker volume create| Acción | Comando |
|---|---|
| Listar los volúmenes del proyecto | |
| Listar las redes creadas |