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.yml versionado;
  • un endpoint de salud en la aplicación, cuando sea posible;
  • acceso sudo para configurar el daemon de Docker.

Puertos necesarios

Los puertos dependen de cada aplicación, pero como criterio general:

  • publica solo 80 y 443 en 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 ls

Estos 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: 30s

Este 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}}' app

Con 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.json

Y agrega una configuración como esta:

{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3"}}

Luego reinicia Docker:

sudo systemctl restart docker

Advertencia: 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 df

Estos 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.

Cloud Serversby Donweb

Todo el poder de la nube a tus proyectos y aplicaciones.
Alojamiento ultra rápido, escalable y con alta disponibilidad.

  • Performance que te sorprenderá
  • Rápida escalabilidad y sin limitaciones
  • Arquitectura de alta disponibilidad
  • Soporte experto y ejecutivos de cuenta
  • Pagos en tu moneda y facturación local

Descubre la mejor solución de Cloud Hosting