Orquesta contenedores de forma fiable con Docker Swarm y Docker Compose: crea una imagen de Nginx, define servicios con réplicas, políticas de reinicio y redes overlay, y despliega con docker stack para mantener todo disponible aunque una instancia falle.
¿Cómo preparar el proyecto con Docker Compose y Swarm?
Empezamos organizando el proyecto en una carpeta stacks con una subcarpeta app y un dockerfile para Nginx. Se construye la imagen primero y luego se usa en Docker Compose; aquí se trabaja con imágenes, no con build. En el archivo compose se agregan servicios con la sección deploy: réplicas, paralelismo y retraso de diez segundos para reponer instancias caídas, además de políticas de reinicio y dos networks: frontend y backend, ambas de tipo overlay.
Se crea la imagen local del frontend con Nginx.
En compose se usa image: frontend:latest, sin build.
En deploy se define replicas, paralelismo y delay de 10 segundos.
Se ajusta la política de reinicio: en un servicio aplica a todo, en otro solo si hay fallo.
Se definen redes overlay para los servicios.
Comandos ejecutados en terminal.
cd stacks
cd app
ls# construir la imagen localdocker build -t frontend .# verificar imágenesdocker images
clear
Decisiones clave en docker-compose.yml.
Usar la imagen local: frontend:latest.
Evitar build: se trabaja con imágenes ya creadas o públicas como Nginx.
En deploy: replicas, paralelismo y un retraso de 10 segundos para recreación.
Dos redes: frontend y backend.
Tipo de red requerido por Docker Swarm: overlay.
Despliegue del stack con compose y Swarm.
# desplegar usando el archivo composedocker stack deploy -c docker-compose.yml mi dispatched
¿Qué pasa cuando caen réplicas en Docker Swarm?
Tras el despliegue, se crean las redes y los servicios definidos. En Docker Desktop se visualizan las réplicas: tres de Nginx y cinco del frontend. Al detener o eliminar una instancia, Swarm detecta la caída y crea una nueva. El estado pasa por “created” en color naranja y luego a verde cuando se ejecuta, manteniendo el servicio disponible todo el tiempo. Esta es la característica más importante de un orquestador: compensar fallos de forma automática.
Creación automática de redes frontend y backend.
Ocho contenedores activos: 3 Nginx y 5 frontend.
Estados visibles: created (naranja) y ejecutándose (verde).
Si una réplica falla, se repone sola tras el retraso configurado.
¿Cómo verificar y limpiar un stack?
Para inspeccionar y desmontar el despliegue se usan los comandos de stack. Al eliminar el stack, también se limpian las redes. Finalmente, se cierra Docker Swarm.
# listar stacksdocker stack ls# eliminar el stack y sus redesdocker stack rm mi despliegue
# cerrar Swarmdocker swarm live --force
¿Cuál es el alcance y las limitantes de Docker Swarm?
Funciona muy bien como mini orquestador de servicios en local y para sistemas pequeños o ligeramente medianos. Se manejan con comodidad entre tres y diez réplicas por servicio y el máximo de contenedores permitidos es de 100. Es un gran “entrenador” y puerta de entrada antes de pasar a opciones más robustas.
Ideal para primeros pasos con orquestadores.
Manejo sencillo de réplicas y autorecuperación.
Límite operativo: 100 contenedores.
¿Tienes dudas sobre tu configuración con Docker Swarm y Docker Compose? Comparte tu caso y comenta cómo definirías tus servicios, réplicas y redes overlay.
Cuando despliegas contenedores usando Docker Swarm y generas réplicas, cada contenedor replica puede atender solicitudes. Docker Swarm utiliza un balanceador de carga interno que distribuye las peticiones entre las réplicas disponibles. Esto significa que no hay un contenedor específico que maneje todas las solicitudes; cualquiera de las réplicas puede atenderlas, optimizando así la disponibilidad y el rendimiento de la aplicación. Esto es esencial para mantener una arquitectura escalable y resiliente en entornos de producción.
update_config define cómo Swarm aplica un despliegue/actualización de un servicio, NO cómo reinicia un contenedor.
update_config:parallelism:1delay: 5s
parallelism
Número de tareas que se actualizan al mismo tiempo
Controla el riesgo durante un despliegue
delay
Tiempo entre actualizar un grupo y el siguiente
Garantiza estabilidad entre pasos
restart_policy define cómo se comporta un task (contenedor dentro de un servicio Swarm) cuando falla o se detiene.