Docker Swarm (Swarm Mode)
Agrupa múltiples hosts de Docker en un clúster virtual para despliegue, escalado y gestión con alta disponibilidad.
Conceptos clave
Un clúster de Docker Swarm se compone de nodos, servicios y tareas, y cuenta con balanceo de carga mediante una malla de enrutamiento integrada (routing mesh).
Nodos (Nodes)
Cada instancia del motor Docker que se une al clúster se convierte en un nodo. Tipos:
- Manager Nodes: manejan la orquestación, el estado del clúster (consenso Raft), programan las tareas y exponen la CLI. Para alta disponibilidad, se recomienda un número impar de managers (3 o 5).
- Worker Nodes: ejecutan las tareas asignadas por los managers; no participan en la gestión.
Servicios y tareas
Defines Servicios (p. ej., “5 réplicas de Nginx”). El manager traduce esa definición en Tareas y las asigna a los workers para su ejecución.
Balanceo de carga
Swarm incluye un balanceador interno y una routing mesh que distribuye el tráfico entrante hacia los contenedores correctos, sin importar en qué nodo se ejecuten.
Ventajas de usar Docker Swarm
-
Simplicidad: integrado en el CLI de Docker, sin herramientas adicionales complejas (a diferencia de Kubernetes).
-
Alta disponibilidad y tolerancia a fallos: reinicio automático de contenedores y reprogramación de tareas si un nodo falla.
-
Escalabilidad: escalar un servicio es tan simple como usar
docker service scale. -
Seguridad por defecto: comunicación entre nodos protegida mediante cifrado TLS mutuo.
Casos de uso ideales
Proyectos pequeños/medianos
Necesitan orquestación sin la complejidad de Kubernetes.
Equipos con experiencia Docker
Permite pasar a clúster rápidamente aprovechando el ecosistema conocido.
Dev/Staging y pruebas
Ideal para entornos temporales o validaciones de carga y resiliencia.
Cómo empezar
Máquinas con Docker instalado. Inicializa el Swarm en un nodo y suma el resto al clúster.
1. Inicializar el Swarm (nodo manager)
# En el nodo que será manager
docker swarm init
# Obtén el token de ingreso para workers
docker swarm join-token worker
2. Unir nodos worker
# En cada nodo worker (usa el token obtenido)
docker swarm join --token <TOKEN> <IP_MANAGER>:2377
3. Desplegar y escalar servicios
# Crear un servicio con 5 réplicas de Nginx
docker service create --name web --replicas 5 -p 80:80 nginx
# Escalar (ejemplo: subir a 10 réplicas)
docker service scale web=10
# Inspeccionar estado y tareas
docker service ls
docker service ps web