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.

activar ufw

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

configuración ufw

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.

verificar 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

instalar deps básicos

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

añadir repositorio docker

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.

actualizar repo

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

instalar docker

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.

comprobar servicio docker

(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:

docker hola-mundo

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.

inicializar enjambre

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.

comprobar modo enjambre

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.

comprobar nodos disponibles

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.

comprobar token de unión

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».

unir nodo trabajador1

unir nodo trabajador2

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.

listado de nodos

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

crear servicio

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.

comprobar servicio

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.

comprobar detalle del servicio

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.

comprobar servicio nginx

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

servicio de báscula

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

comprobar servicio escalado

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.

comprobar servicio trabajador1

comprobar servicio trabajador2

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.

También te podría gustar...