Muchas aplicaciones se levantan con Docker Compose, pero fallan al reiniciar porque no validan salud, no separan redes o pierden datos por volúmenes mal definidos.
Docker Compose permite definir servicios, redes, volúmenes, variables y healthchecks en un archivo declarativo. Bien usado, ayuda a construir entornos más estables, predecibles y fáciles de revisar antes de pasar a producción.
Cuándo conviene aplicarlo
Este enfoque es útil para:
- MVPs que empiezan a crecer hacia producción.
- Ambientes de staging.
- Aplicaciones web con base de datos y caché.
Requisitos previos
Antes de empezar, asegúrate de contar con:
- Docker Engine y el plugin Compose.
- Un servidor Linux.
- El repositorio de la aplicación.
- Variables de entorno fuera del repositorio.
Arquitectura de trabajo
El flujo recomendado conecta una red frontend, el servicio web, una red backend, PostgreSQL, Redis y healthchecks.
La idea es validar cada etapa antes de pasar a la siguiente, conservar un punto de retorno y evitar cambios invisibles en producción.
Paso 1: Crear el archivo de entorno
Centraliza los valores sensibles fuera del archivo Compose y facilita los cambios entre staging y producción.
cp .env.example .env
chmod 600 .envPaso 2: Definir servicios y redes
Separar el tráfico público del privado reduce el riesgo de exponer la base de datos por error.
services:
web:
build: .
ports: ['8080:8000']
networks: [frontend, backend]
db:
image: postgres:18
networks: [backend]
networks:
frontend: {}
backend: {}Paso 3: Agregar volúmenes persistentes
Los volúmenes persistentes evitan perder datos al recrear contenedores.
volumes:
pgdata:
services:
db:
volumes:
- pgdata:/var/lib/postgresql/dataPaso 4: Configurar healthchecks
Un healthcheck permite distinguir entre un contenedor encendido y un servicio realmente listo para operar.
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U app']
interval: 10s
timeout: 5s
retries: 5Paso 5: Levantar y revisar el estado
Antes de exponer la aplicación, confirma que todos los servicios estén sanos.
docker compose up -d --build
docker compose ps
docker compose logs -f webPruebas de funcionamiento
Antes de mover el cambio a producción, ejecuta las validaciones del último paso y revisa:
- Los logs del servicio.
- La salida de los comandos.
- El estado de cada contenedor.
- La respuesta real de la aplicación.
Si el cambio afecta datos, restaura o prueba primero en un entorno aislado antes de operar sobre información real.
Advertencias de seguridad
Ten en cuenta estas recomendaciones antes de publicar el entorno:
- No publiques puertos de base de datos o caché si no son necesarios.
- Usa archivos
.envcon permisos restrictivos. - Evita
latesten servicios críticos.
Problemas frecuentes
La app inicia antes que la base de datos
Usa healthcheck y depends_on con condición cuando el flujo lo requiera.
El volumen parece vacío
Revisa el nombre del proyecto Compose y el volumen activo con:
docker volume ls
Buenas prácticas para producción
Para un entorno más robusto, considera:
- Agregar rotación de logs del daemon Docker.
- Respaldar volúmenes.
- Separar staging y producción con archivos override.
- Probar la restauración de datos.