Docker Stack: automatiza despliegues multinodo

Clase 19 de 24Curso de Swarm

Resumen

Con Docker Swarm y los stacks puedes describir, versionar y automatizar despliegues multinodo con la misma sintaxis de Docker Compose. Además, controlas dónde corre cada servicio con constraints, inspeccionas tareas y puertos publicados, y actualizas repitiendo un único comando. Todo queda claro en un archivo legible que actúa como documentación viva de la arquitectura.

¿Qué es un stack en Docker Swarm?

Un stack es, en la práctica, un conjunto de servicios definido con un Compose file que Swarm entiende para correr en múltiples nodos. No es un objeto rígido: puedes administrar servicios por separado aunque pertenezcan al mismo stack. Su fuerza está en que reutiliza formato conocido y añade opciones pensadas para producción.

¿Cómo se relaciona con Docker Compose?

  • Usa el mismo archivo de Compose.
  • La sección deploy se ignora en docker compose, pero sí aplica en docker stack deploy.
  • Permite declarar placement y constraints para controlar el despliegue en nodos manager o worker.

¿Qué ventajas aporta como archivo versionado?

  • Trazabilidad: el archivo vive en GitHub o Bitbucket.
  • Claridad arquitectónica: “servicio A usa imagen X, servicio B usa imagen Y”.
  • Onboarding simple: quien llega nuevo entiende rápido servicios, imágenes y constraints.

¿Cómo desplegar, inspeccionar y actualizar servicios?

El flujo es directo: limpias lo anterior, despliegas el stack, inspeccionas servicios y tareas, y si editas el archivo, vuelves a desplegar para que Swarm aplique diferencias.

¿Cómo limpiar servicios y puertos previos?

  • Eliminar servicios libera puertos publicados.
docker service rm app db

¿Cómo desplegar con docker stack deploy?

  • Despliega el stack con un Compose file y un nombre.
docker stack deploy -c stack.yml app
  • Verifica servicios y tareas.
docker service ls
docker stack ls
docker stack ps app
docker stack services app
  • Notas:
  • En stack services verás puertos publicados por servicio.
  • En stack ps verás tareas por servicio.
  • Si defines réplicas, se reflejan en el conteo esperado/actual.

¿Cómo actualizar sin recrear todo?

  • Edita el archivo y vuelve a ejecutar el mismo comando.
docker stack deploy -c stack.yml app
  • Swarm detecta diferencias y rota solo lo necesario, por ejemplo reubicando tareas según nuevas reglas.

¿Cómo controlar el placement y la exposición?

Puedes decidir que ciertos servicios corran en workers y otros en managers, manteniendo conexiones internas mediante overlay network y publicando puertos solo donde corresponda. En entornos como Play With Docker, los puertos expuestos quedan accesibles desde el exterior.

¿Cómo fijar constraints de worker en el Compose?

  • Usa la sección deploy con placement constraints.
services:
  app:
    image: swarm-networking
    # ... otras claves de Compose que ya usabas
    deploy:
      placement:
        constraints:
          - node.role == worker
  • En docker compose esta sección se ignora. En docker stack deploy toma efecto.

¿Cómo ver puertos publicados y redes?

  • Con docker stack services app verificas puertos publicados por servicio.
  • Swarm crea automáticamente una overlay network para interconectar servicios del stack en múltiples nodos.

¿Te gustaría que revisemos un ejemplo con múltiples réplicas y distintos constraints por servicio? Cuéntame en comentarios qué arquitectura quieres desplegar y lo exploramos juntos.