Docker Swarm es una herramienta de agrupación y programación de contenedores Docker, Con Swarm puedes establecer y gestionar un grupo de nodos Docker como un único sistema virtual.
En este artículo vas a crear un servicio Nginx replicado en 3 nodos. La ventaja es que puedes desplegar réplicas muy fácilmente, con lo cual podrás escalar nuestra infraestructura en cuanto lo necesites.
Para este artículo necesitarás 3 servidores con Ubuntu 22.04, uno será el “Manager” desde el que controlarás replicas (el Manager a su vez hará de nodo) y los otros 2 servidores serán “Workers” (Nodos), podrás desplegar tantos como necesites. La idea es montar la siguiente infraestructura:
Instalación y configuración de los servidores
Lo primero que haremos es actualizar el servidor e instalar Docker en los 3 servidores.
# apt update && apt upgrade
# apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
# install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# chmod a+r /etc/apt/keyrings/docker.gpg
# echo "deb [arch=\"$(dpkg --print-architecture)\" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt update
# apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# systemctl is-enabled docker
# systemctl status docker
Configura los hosts (nano /etc/hosts) en los 3 servidores con:
200.234.228.230 manager01
200.234.230.228 worker01
200.234.232.71 worker02
Para poder conectar los servidores tendrás que abrir el puerto 2377 en el FW de Clouding en los 3 servidores, puedes hacerlo añadiendo en el perfil utilizado la siguiente regla de FW:
Configuración para Manager
Este paso solo lo ejecutaremos en el servidor “manager01”:
# docker swarm init --advertise-addr 200.234.228.230
Devolverá un comando que es el que ejecutaremos en el siguiente paso.
Configuración para Workers
Este paso solo lo realizarás en los servidores “worker01” y “worker02”, sirve para añadir los servidores a Swarm (es justo la línea que te facilitará el comando anterior, hay que copiarla directamente):
# docker swarm join --token SWMTKN-1-4ptgo95auiw4azer1uy9mw223wcg5s1p39z7qojkeubiyttran-6x1yt4a0fdquxmqomm2dslexi 200.234.228.230:2377
Si te da error de Timeout, es muy probable que se deba al Firewall del servidor:
Swarm Visualizer
Este paso es opcional, te permitirá ver desde una interfaz web nodos, contenedores, servicios, … Lo tendrás que ejecutar en “manager01”:
# apt install unzip
# wget https://github.com/dockersamples/docker-swarm-visualizer/archive/master.zip
# unzip master.zip
# mv docker-swarm-visualizer-master dockersamples
# docker run -it -d -p 5000:8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer
Para poder conectar a la web tendrás que abrir el puerto 5000 en el FW de Clouding en el servidor master, puedes hacerlo añadiendo en el perfil utilizado la siguiente regla de FW:
Creamos servicio Nginx con 3 réplicas
Ahora que ya tienes todo listo, puedes crear tu servicio de Nginx con 3 réplicas:
# docker service create --name mi-web --publish 8080:80 nginx
# docker service scale mi-web=3
Si entras desde un navegador a la IP pública del manager01 por el puerto 5000 verás Swarm Visualizer, en este caso http://46.183.119.183:5000/
Ya has llegado al final del artículo, la ventaja de usar Swarm es que puedes tener una infraestructura escalable, podemos crear más replicas dentro de un mismo nodo o añadir nodos en cualquier momento. En nuestro ejemplo podrían ser varios contenedores con el servicio Nginx que podríamos balancear siguiendo este artículo.
Puedes ver más información al respecto en la documentación de Docker.
Recuerda, si tienes consultas sobre esta u otra cuestión relacionada con tus servidores en Clouding, no dudes en escribir a soporte@clouding.io ¡Estamos a tu lado para lo que necesites, consúltanos!