Cómo instalar Docker Swarm en Ubuntu 22.04
Docker Swarm es una orquestación de contenedores construida sobre Docker Engine. Te permite crear y desplegar un clúster de nodos Docker en varios servidores. Docker Swarm simplifica el despliegue de tus aplicaciones en contenedores en un servicio. Proporciona una forma sencilla y fácil de gestionar y orquestar contenedores.
Docker Swarm ofrece un alto nivel de aplicaciones disponibles. En Docker Swarm, puedes ejecutar una única aplicación o servicio en varios nodos, que se denominan «Nodos Trabajadores». Y también hay un nodo llamado «Gestor del Enjambre», que es la gestión central y la orquestación del Enjambre Docker.
En este tutorial, te mostraremos cómo instalar paso a paso el software Docker Swarm en servidores Ubuntu 22.04.
Requisitos previos
Para completar esta guía, asegúrate de que dispones de lo siguiente
- 3 servidores Ubuntu 22.04 – Uno se utilizará como Maestro/Gestor del Enjambre, y dos servidores se utilizarán como Nodos Trabajadores.
- Un usuario no root con privilegios de administrador sudo.
Configuración de los sistemas
Antes de instalar Docker y configurar Docker Swarm, debes preparar tus sistemas completando las siguientes tareas:
- Abrir Puertos para Docker Swarm: Debes abrir algunos puertos que utiliza Docker Swarm en todos tus servidores. Esto se puede conseguir mediante UFW (Uncomplicated Firewall).
- Añadir Repositorio Docker: Utilizarás el repositorio oficial de Docker para instalar Docker Engine en todos tus servidores.
Abrir puertos para Docker Swarm
En la siguiente sección, abrirás el puerto 22 para SSH y, a continuación, los puertos 2377, 7946 y 4789 para Docker Swarm a través de UFW (Uncomplicated Firewall) en el Maestro/Gestor del Enjambre y en los Nodos del Enjambre. El UFW está instalado por defecto, pero aún no se ha iniciado.
En primer lugar, ejecuta el siguiente comando ufw para añadir el perfil de aplicación OpenSSH y abrir el puerto SSH 22 por defecto. A continuación, inicia y habilita la UFW.
sudo ufw allow OpenSSH sudo ufw enable
Escribe y para continuar, y deberías obtener la salida El cortafuegos está activo y habilitado al iniciar el sistema.
Ahora ejecuta el siguiente comando para abrir los puertos que utilizarán los servicios de tu despliegue de Enjambre. En este caso, asignarás puertos entre 30000:35000 para los servicios.
sudo ufw allow 30000:35000/tcp
A continuación, ejecuta el siguiente comando para abrir puertos para Docker Swarm.
for ports in 2377/tcp 7946/tcp 7946/udp 4789/udp do sudo ufw allow $ports done
Por último, recarga UFW y verifica el estado de UFW ejecutando el siguiente comando.
sudo ufw reload sudo ufw status
Deberías ver el perfil de aplicación OpenSSH y los puertos para Docker Swarm, incluidos 2377, 7946 y 4789, habilitados en UFW.
Añadir repositorio Docker
Después de configurar el UFW, debes añadir el repositorio oficial de Docker a tus servidores. Utilizarás el repositorio oficial de Docker para instalar Docker Engine.
Ejecuta el siguiente comando para instalar algunos paquetes básicos en tus servidores Ubuntu.
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
A continuación, ejecuta el siguiente comando para añadir la clave GPG de Docker y el repositorio a tus sistemas.
sudo 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 sudo 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
Por último, actualiza y refresca tu repositorio de Ubuntu en cada servidor ejecutando el comando siguiente.
sudo apt update
Deberías ver cómo se obtiene el repositorio Docker durante el proceso.
Instalación del motor Docker
Después de preparar tus sistemas Ubuntu, instalarás Docker Engine en esos servidores.
Instala Docker Engine en tus sistemas Ubuntu utilizando el siguiente comando. Introduce y para confirmar la instalación.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Una vez finalizada la instalación, ejecuta el siguiente comando systemctl para verificar el servicio docker y asegurarte de que se está ejecutando.
sudo systemctl is-enabled docker sudo systemctl status docker
En la siguiente salida, deberías ver que el servicio docker se está ejecutando y está habilitado.
(Opcional): Permitir que los no-root ejecuten contenedores Docker
Si estás desplegando Docker Swarm y ejecutando contenedores con un usuario no root, debes añadir tu usuario al grupo docker para que pueda ejecutar el comando docker y ejecutar contenedores.
Ejecuta el siguiente comando usermod para añadir tu usuario actual al grupo docker.
sudo usermod -aG docker username
Ahora inicia sesión como usuario no root y ejecuta el comando docker que aparece a continuación para verificar tu configuración.
su - username docker run hello-world
Si la configuración es correcta, deberías poder ejecutar el contenedor hola-mundo y obtener la siguiente salida:
Creando Docker Swarm
Ahora que has instalado el motor Docker, estás listo para crear e iniciar Docker utilizando tus servidores Ubuntu. En este ejemplo, utilizaremos un servidor como Maestro/Gestor del Enjambre y dos servidores como Nodos Trabajadores.
Realiza las siguientes tareas para configurar Docker Swarm:
- Inicializar el modo Enjambre en el Maestro/Gestor.
- Añadir Nodos Trabajadores al Enjambre Docker.
Comencemos.
Inicializar el modo Enjambre en el Maestro/Gestor
Para inicializar Docker Swarm, ejecuta el siguiente comando docker swarm init. El parámetro adicional –advertise-addr vinculará el Enjambre Docker dentro de la dirección IP específica, y el parámetro –default-addr-pool determina la dirección IP interna para los contenedores que se ejecutan en el Enjambre.
En este ejemplo, el modo Docker Swarm se vinculará a la dirección IP 192.168.5.30 y el pool de direcciones IP para contenedores es 10.20.0.0/16.
docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16
Si el proceso de inicialización tiene éxito, se mostrará la siguiente salida. Dentro de la salida, deberías ver el token generado para añadir Nodos a Docker Swarm.
A continuación, ejecuta el siguiente comando para comprobar el estado del modo Enjambre.
docker info
Si el modo Enjambre está activado, deberías obtener la salida Enjambre: activo con los detalles de NodeID, y el estado del Gestor y del Nodo.
Por último, ejecuta el siguiente comando para verificar la lista de Nodos en el Enjambre Docker.
docker node ls
En este punto, sólo hay un Nodo disponible en tu Enjambre Docker, que es el Maestro/Gestor del Enjambre.
Añadir Nodos Trabajadores a Docker Swarm
Con el Enjambre Docker inicializado, puedes añadir nodos trabajadores a tu Enjambre Docker.
En primer lugar, ejecuta el siguiente comando para mostrar el token generado para el nodo trabajador.
docker swarm join-token worker
Deberías ver las instrucciones para añadir nodos trabajadores, que incluyen el token.
Ahora, dirígete al nodo trabajador y añádelo al Enjambre Docker ejecutando el comando docker swarm join que aparece a continuación.
docker swarm join --token SWMTKN-1-0i6kbe2oek1iw19jfpvd2j5l0dhfmssz4w505aeihx7ouz8wqc-2dbk7cnmo12uunj53eywwnqr7 192.168.5.30:2377
Cuando el proceso se realice correctamente, aparecerá en tu pantalla el mensaje «Este nodo se ha unido a un enjambre como trabajador».
A continuación, vuelve al Maestro/Gestor del Enjambre y ejecuta el siguiente comando para verificar la lista de nodos disponibles.
docker node ls
Si todo va bien, habrá tres servidores disponibles en el Enjambre Docker, 1 el Gestor del Enjambre y 2 nodos trabajadores con el estado Listo y la disponibilidad se está ejecutando.
Ejecutar el servicio en Docker Swarm
Llegados a este punto, has creado con éxito Docker Swarm con tres servidores Ubuntu. Ahora, aprenderás a desplegar tu aplicación en el Enjambre Docker, lo que se denomina un servicio. Un servicio es una imagen de tu aplicación de microservicio, y puede ser un servidor HTTP, un servidor de base de datos u otras aplicaciones.
En este ejemplo, desplegarás un sencillo servicio HTTP con una imagen Nginx.
Ejecuta el siguiente comando para crear un nuevo servicio en tu Enjambre. En este ejemplo, crearás un nuevo servicio test-nginx con 1 réplica, expondrás el puerto 30001 y basarás la imagen nginx:alpine.
docker service create --replicas 1 --name test-nginx -p 30001:80 nginx:alpine
Ahora, comprueba los detalles del servicio test-nginx utilizando el comando siguiente.
docker service inspect test-nginx docker service inspect --pretty test-nginx
Deberías ver información detallada sobre el servicio test-nginx como la siguiente.
A continuación, comprueba la lista de servicios Docker dentro del Enjambre Docker utilizando el comando siguiente.
docker service ls docker service ps test-nginx
Si tiene éxito, deberías ver el servicio test-nginx ejecutándose en el gestor NODE con 1 réplica y puerto expuesto 30001.
Por último, accede al servicio test-nginx a través de la dirección IP del host con el puerto 30001 utilizando el siguiente comando curl.
curl 192.168.5.30:30001 curl -I 192.168.5.30:30001
Deberías ver la página de código fuente index.html y los detalles de las cabeceras HTTP.
Escalar el servicio en Docker Swarm
Ahora que has desplegado el servicio Docker, la siguiente tarea es escalar el servicio en Docker Swarm. Esto creará la replicación deseada de tus servicios a través de los nodos trabajadores.
Para escalar un servicio, ejecuta el siguiente comando docker service scale. En este caso, escalarás el servicio test-nginx a 3 réplicas.
docker service scale test-nginx=3
Ahora ejecuta el siguiente comando para verificar el servicio test-nginx. Si el servicio test-nginx se ha escalado, deberías ver otros dos servicios creados por Docker y ejecutándose en ambos nodos trabajadores.
docker service ps test-nginx
Pasa al terminal del nodo trabajador y ejecuta el siguiente comando para asegurarte de que el servicio test-nginx se está ejecutando.
docker ps curl 192.168.5.31:30001
Si todo va bien, deberías ver el contenedor test-nginx.RANDOM-STRING con el estado Up en cada uno de los nodos trabajadores.
Eliminar el servicio en Docker Swarm
Para limpiar tu entorno, borrarás el servicio test-nginx de Docker Swarm y eliminarás la imagen docker nginx:alpine.
Elimina el servicio test-nginx y comprueba la lista de servicios disponibles en Docker Swarm utilizando el siguiente comando.
docker service rm test-nginx docker service ps
Ahora elimina la imagen nginx:alpine y comprueba la lista de imágenes descargadas para cada servidor utilizando el siguiente comando.
docker rmi nginx:alpine docker images
Conclusión
Para terminar, ya has instalado con éxito Docker Swarm en Ubuntu 22.04 paso a paso. Has desplegado Docker Swarm con tres servidores Ubuntu y has aprendido a desplegar, escalar y eliminar aplicaciones o servicios en Docker Swarm.