Un servidor cloud te da libertad para desplegar aplicaciones, automatizaciones y bases de datos. Pero esa libertad también exige criterio operativo.
En esta guía vas a ver una implementación práctica para usar Docker Compose en producción con healthchecks, logs controlados y reinicios seguros. El objetivo es pasar de un docker-compose.yml que funciona localmente a una configuración más predecible, mantenible y verificable en un servidor cloud.
La idea no es memorizar comandos sueltos, sino construir un flujo repetible: auditar el entorno, agregar controles de salud, definir políticas de reinicio, limitar logs y documentar la operación diaria.
¿Qué es Docker Compose en producción?
Docker Compose puede usarse en servidores chicos y medianos si se acompaña con prácticas operativas básicas:
- checks de salud;
- reinicio controlado;
- logs acotados;
- volúmenes persistentes;
- una forma clara de actualizar y verificar servicios.
No se trata solo de levantar contenedores. En producción también importa saber qué pasa cuando una app falla, cuando el servidor reinicia o cuando los logs empiezan a ocupar demasiado disco.
¿Cuándo conviene aplicar estos ajustes?
Este enfoque es útil si:
- tienes una app en contenedores y quieres llevarla a un Cloud Server;
- tus contenedores llenan disco por logs;
- necesitas que los servicios vuelvan a levantar después de un reboot;
- quieres una operación más clara y segura para el equipo.
Requisitos previos
Antes de avanzar, conviene contar con:
- Docker Engine y Docker Compose instalados;
- un proyecto con
docker-compose.ymlversionado; - un endpoint de salud en la aplicación, cuando sea posible;
- acceso
sudopara configurar el daemon de Docker.
Puertos necesarios
Los puertos dependen de cada aplicación, pero como criterio general:
- publica solo
80y443en el proxy; - deja bases de datos, cachés y servicios internos dentro de la red de Compose.
No publiques puertos internos si solo los consume otra aplicación dentro del mismo stack.
Paso 1: Auditar el Compose actual
Antes de endurecer la configuración, revisa qué está exponiendo tu proyecto y cómo están definidos sus servicios.
Ejecuta:
docker compose configdocker compose psdocker network lsEstos comandos te ayudan a detectar puertos públicos, redes, volúmenes y servicios sin persistencia.
Advertencia: no publiques puertos de bases de datos si solo los consume la aplicación.

Paso 2: Agregar healthchecks

Un contenedor puede estar “corriendo” aunque la aplicación no esté respondiendo correctamente. Por eso conviene diferenciar entre contenedor activo y aplicación saludable.
Un ejemplo simple de healthcheck sería:
healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:3000/health'] interval: 30sEste control permite verificar si la aplicación responde en su endpoint de salud.
Advertencia: un healthcheck debe ser barato y confiable. No lo conviertas en una prueba pesada ni dependiente de procesos lentos.
Paso 3: Definir políticas de reinicio

Las políticas de reinicio ayudan a recuperar servicios ante fallos simples o después de un reinicio del host.
Una opción habitual es:
restart: unless-stoppeddocker compose up -ddocker inspect --format='{{.HostConfig.RestartPolicy.Name}}' appCon esto puedes levantar los servicios y verificar qué política de reinicio quedó aplicada.
Advertencia: no uses reinicios automáticos para ocultar crashes constantes. Si un servicio entra en loop, revisa logs y busca la causa raíz.
Paso 4: Rotar logs de contenedores

Los logs enviados a stdout y stderr pueden crecer hasta consumir todo el disco si no se limitan.
Para configurar rotación de logs en Docker, edita el archivo:
sudo nano /etc/docker/daemon.jsonY agrega una configuración como esta:
{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3"}}Luego reinicia Docker:
sudo systemctl restart dockerAdvertencia: este cambio aplica a contenedores nuevos. Recréa los servicios para que tomen la política actualizada.
Paso 5: Documentar la operación diaria
Una configuración más segura también necesita comandos claros para mantenimiento y diagnóstico.

Puedes dejar documentados comandos como:
docker compose pulldocker compose up -ddocker compose logs --tail=200 -fdocker system dfEstos comandos cubren tareas frecuentes: actualizar imágenes, recrear servicios, revisar logs recientes y consultar uso de disco.
Advertencia: evita usar docker system prune de forma agresiva sin entender qué volúmenes, imágenes o recursos están en uso.
Reforzar seguridad
Antes de dar por terminado el despliegue, revisa tres puntos:
- que el servicio público sea realmente el que querías publicar;
- que los puertos internos no hayan quedado expuestos;
- que los secretos no estén en archivos versionados ni en historiales de shell.
Si el procedimiento toca bases de datos, runners, automatizaciones o certificados, prueba primero en un entorno secundario.
También conviene documentar cómo se reinicia, cómo se actualiza, dónde están los logs y cuál es el comando de verificación rápida. Esa información vale mucho cuando otra persona del equipo tiene que intervenir.
Problemas frecuentes
El healthcheck marca unhealthy
Ejecuta el mismo comando dentro del contenedor y revisa sus dependencias.
Los logs siguen creciendo
Recrea los contenedores y confirma la configuración con docker inspect para ver LogConfig.
El servicio entra en restart loop
Desactiva temporalmente el reinicio automático, lee los logs y corrige configuración o secretos.
Conclusión
Si ya usas Docker en DonWeb Cloud, estos ajustes convierten un Compose funcional en una base mucho más operable para producción.
Agregar healthchecks, políticas de reinicio, rotación de logs y comandos de verificación no vuelve al despliegue más complejo: lo vuelve más predecible. Y en un servidor cloud, esa previsibilidad es parte central de una operación segura y mantenible.