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
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
:
services:
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
Inspeccionar 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.
- Lista de vídeos en Youtube: Curso de Docker