Saltar al contenido principal

Docker Swarm

Docker Swarm es una herramienta de orquestación de contenedores que permite darle escalabilidad a nuestras aplicaciones y cubrir las limitaciones de docker compose. Viene incluido en Docker, permite distribuir contenedores en diferentes nodos y gobernarlos de manera centralizada.

Sería una alternativa a Kubernetes, algo más limitado, pero a la vez más sencillo de usar y configurar. Lo más importante, es que usa ficheros YAML como compose, con alguna etiqueta adicional a lo que vimos en el vídeo anterior. Esto hace que de entrada, sea muy sencillo de usar.

Dentro vídeo: https://youtu.be/bvUZuANQdhI

Docker Swarm

Activar Docker Swarm

Docker Swarm viene preinstalado tanto en Docker Desktop como en Docker Engine. Lo único que tendremos que hacer, es activar el modo Swarm. Para ello, ejecutamos el siguiente comando:

docker swarm init

Con este comando, estamos creando un nodo manager, que es el que se encargará de gobernar el resto de nodos.

Gestión de nodos

Crear nodos o worker

Una vez que tenemos el nodo manager, podemos añadir nodos workers. Para ello, ejecutamos el siguiente comando en el nodo que queramos añadir:

docker swarm join --token <token> <ip_manager>:<puerto>

Importante tener en cuenta que tiene que haber conectividad entre los nodos, por lo que si estamos en una red local, no habrá problema. En caso de estar en la nube, tendremos que abrir el puerto 2377, que es el que usa Docker Swarm por defecto.

Eliminar nodo o workers

Podemos eliminar un nodo de la siguiente manera:

docker node rm <nombre_nodo>

Desactivar Docker Swarm

Para desactivar Docker Swarm, ejecutamos el siguiente comando:

docker swarm leave

Esto eliminaría el nodo y desactivaría el modo Swarm. En caso de ser un nodo manager, se eliminaría el cluster completo.

Servicios

Crear servicios

Aunque lo más habitual es definir los servicios en un fichero YAML, también podemos crearlos directamente con el comando docker service create. Por ejemplo, el siguiente comando crea un servicio con 5 réplicas de la imagen nginx:

docker service create --name web --replicas 5 nginx

También podríamos natear puertos con el comando docker service create. Por ejemplo, el siguiente comando crea un servicio con 5 réplicas de la imagen nginx y mapea el puerto 80 del contenedor al puerto 8080 del host:

docker service create --name web --replicas 5 --publish 8080:80 nginx

Inspeccionar y listar servicios

Una vez desplegado un servicio, podemos inspeccionarlo con el comando docker service inspect. Por ejemplo, el siguiente comando inspecciona el servicio web:

docker service inspect web

Además, podemos listar los servicios con el comando docker service ls. Por ejemplo, el siguiente comando lista los servicios desplegados:

docker service ls

Logs de servicios

Podemos ver los logs de un servicio con el comando docker service logs. Por ejemplo, el siguiente comando muestra los logs del servicio web:

docker service logs web

Balanceo de carga

Docker Swarm incluye un balanceador de carga interno que distribuye las peticiones entre los contenedores de un servicio. Por defecto, el balanceador de carga de Docker Swarm es Round Robin, es decir, distribuye las peticiones de manera equitativa entre los contenedores.

Escalar servicios

Podemos escalar un servicio con el comando docker service scale. Por ejemplo, el siguiente comando escala el servicio web a 10 réplicas:

docker service scale web=10

Actualizar servicios

Podemos actualizar un servicio con el comando docker service update. Por ejemplo, el siguiente comando actualiza el servicio web con la imagen nginx:latest:

docker service update --image nginx:alpine web

Rollback de servicios

En caso de que la actualización de un servicio falle, podemos hacer un rollback a la versión anterior con el comando docker service rollback. Por ejemplo, el siguiente comando hace un rollback del servicio web:

docker service rollback web

Eliminar servicios

Podemos eliminar un servicio con el comando docker service rm. Por ejemplo, el siguiente comando elimina el servicio web:

docker service rm web

Compose y stacks

Los servicios son la manera de orquestar los contenedores en Docker Swarm. Se definen en un fichero YAML, similar a los ficheros de Docker Compose, pero con alguna etiqueta adicional. Por ejemplo, el siguiente fichero YAML define un servicio que crea 5 contenedores de la imagen nginx:

web:
image: nginx
deploy:
replicas: 5

Docker Swarm es compatible con Docker Compose, por lo que podemos desplegar servicios con ficheros YAML de Docker Compose. Para ello, usamos el comando docker stack deploy. Por ejemplo, el siguiente comando despliega un stack con el fichero docker-compose.yml:

docker stack deploy -c docker-compose.yml myapp

Listar stacks

Podemos listar los stacks con el comando docker stack ls. Por ejemplo, el siguiente comando lista los stacks desplegados:

docker stack ls

TODO stacks

Podemos inspeccionar un stack con el comando docker stack inspect. Por ejemplo, el siguiente comando inspecciona el stack myapp:

docker stack ps myapp

Eliminar stacks

Podemos eliminar un stack con el comando docker stack rm. Por ejemplo, el siguiente comando elimina el stack myapp:

docker stack rm myapp

Logs stacks

Podemos ver los logs de un servicio o stack con el comando docker service logs. Por ejemplo, el siguiente comando muestra los logs del servicio web:

docker service logs nombrestack_servicio

Los logs de un stack se pueden ver de la misma manera que los logs de un servicio, simplemente hay que indicar el nombre del stack en lugar del nombre del servicio.

Próximos pasos

Aunque en este curso no vamos a profundizar en Docker Swarm, es importante que conozcas su existencia y cómo funciona. Si quieres profundizar más en Docker Swarm, te recomiendo que le eches un vistazo a la documentación oficial de Docker Swarm.

Además, más adelante, haré un mini curso de Docker Swarm, donde profundizaremos en su uso y configuración. Si te interesa, no dudes en suscribirte al canal para estar al tanto de las novedades.

Ya veis el potencial y lo sencillo que es trabajar con Docker Swarm, sobretodo ahora que ya tenemos una base de Docker Compose y más aún si lo comparamos con la complejidad de Kubernetes.


Volver al índice