Docker Swarm: Escalando con Multi-Nodo

Por: Artiko
dokploydocker-swarmclusterscaling

Docker Swarm: Escalando con Multi-Nodo

Hasta ahora hemos trabajado con un solo servidor. Docker Swarm permite distribuir tus aplicaciones en multiples servidores, ganando alta disponibilidad y capacidad de escalar horizontalmente.

Que es Docker Swarm

Docker Swarm es el orquestador de contenedores integrado en Docker. Convierte un grupo de servidores en un cluster donde los contenedores se distribuyen automaticamente.

Conceptos clave:

Por que usarlo con Dokploy

Dokploy usa Docker Swarm internamente desde su instalacion. Incluso con un solo servidor, tus aplicaciones corren como servicios de Swarm. Agregar nodos es cuestion de un comando.

Ventajas concretas:

Inicializar un Cluster Swarm en Dokploy

Al instalar Dokploy, tu servidor ya es un nodo manager. Puedes verificarlo:

docker node ls

Salida esperada:

ID                            HOSTNAME   STATUS   AVAILABILITY   MANAGER STATUS
abc123def456 *   dokploy-01   Ready    Active         Leader

El asterisco indica que es el nodo actual. Leader significa que es el manager principal.

Agregar Nodos Worker

Preparar el nuevo servidor

En el servidor que sera worker, instala Docker:

curl -fsSL https://get.docker.com | sh

Asegurate de que los siguientes puertos estan abiertos entre los nodos:

PuertoProtocoloProposito
2377TCPComunicacion del cluster
7946TCP/UDPDescubrimiento de nodos
4789UDPOverlay network (VXLAN)

Obtener el token de join

En el nodo manager (tu servidor Dokploy):

docker swarm join-token worker

Esto genera un comando como:

docker swarm join --token SWMTKN-1-xxxxx 192.168.1.100:2377

Unir el worker al cluster

En el nuevo servidor, ejecuta el comando generado:

docker swarm join --token SWMTKN-1-xxxxx 192.168.1.100:2377

Verifica desde el manager:

docker node ls
ID                            HOSTNAME       STATUS   AVAILABILITY   MANAGER STATUS
abc123def456 *   dokploy-01     Ready    Active         Leader
ghi789jkl012     dokploy-02     Ready    Active

Registrar el nodo en Dokploy

Desde el panel de Dokploy:

  1. Ve a Settings > Server
  2. Selecciona Add Server
  3. Ingresa la IP del worker y las credenciales SSH
  4. Dokploy detectara automaticamente que ya es parte del Swarm

Configurar Replicas de una Aplicacion

Desde el panel de Dokploy

En la configuracion de tu aplicacion:

  1. Ve a la pestana Advanced
  2. Busca Replicas
  3. Define el numero de replicas deseado
  4. Haz clic en Deploy

Desde la linea de comandos

Tambien puedes escalar directamente con Docker:

# Ver servicios actuales
docker service ls

# Escalar a 3 replicas
docker service scale app-nombre_app=3

# Verificar distribucion
docker service ps app-nombre_app

Salida del ultimo comando:

ID          NAME              NODE           DESIRED STATE   CURRENT STATE
a1b2c3      app_nombre.1      dokploy-01     Running         Running 2 min
d4e5f6      app_nombre.2      dokploy-02     Running         Running 1 min
g7h8i9      app_nombre.3      dokploy-01     Running         Running 1 min

Consideraciones para replicas

No todas las aplicaciones pueden tener multiples replicas sin ajustes:

Distribucion de Carga entre Nodos

Docker Swarm incluye un balanceador de carga integrado llamado routing mesh. Cualquier nodo del cluster puede recibir peticiones para cualquier servicio, aunque el contenedor no corra en ese nodo.

Cliente -> Nodo 1 (puerto 80) -> routing mesh -> Contenedor en Nodo 2

Configurar constraints

Puedes controlar donde corren los contenedores con labels y constraints:

# Agregar label a un nodo
docker node update --label-add tipo=gpu dokploy-02

# En docker-compose.yml de tu app
services:
  app:
    deploy:
      placement:
        constraints:
          - node.labels.tipo == gpu

Limitar recursos por nodo

services:
  app:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M

Zero-Downtime Deployments con Swarm

Swarm realiza rolling updates por defecto. Puedes configurar la estrategia:

services:
  app:
    deploy:
      update_config:
        parallelism: 1          # actualizar de a 1 replica
        delay: 10s              # esperar 10s entre cada una
        failure_action: rollback # revertir si falla
        order: start-first      # iniciar nueva antes de parar vieja
      rollback_config:
        parallelism: 1
        delay: 5s

La opcion order: start-first es clave: levanta la nueva version antes de bajar la anterior, eliminando el downtime.

Verificar un rollout

# Ver estado del update
docker service inspect --pretty app-nombre

# Forzar rollback manual
docker service rollback app-nombre

Cuando Escalar Verticalmente vs Horizontalmente

Escalar verticalmente (mas recursos al servidor)

Conviene cuando:

Escalar horizontalmente (mas nodos)

Conviene cuando:

Recomendacion practica

Para la mayoria de proyectos:

  1. Empieza con un solo servidor bien dimensionado
  2. Optimiza la aplicacion antes de agregar nodos
  3. Agrega un segundo nodo cuando necesites alta disponibilidad
  4. Escala horizontalmente cuando el trafico lo justifique

Un VPS con 4 CPU y 8 GB de RAM puede manejar multiples aplicaciones con Dokploy antes de necesitar un cluster.


Siguiente: CI/CD con Webhooks y CLI