Cómo instalar Docker Swarm en Rocky Linux

Docker Swarm es una orquestación de contenedores construida sobre Docker Engine. Te permite crear y desplegar un clúster de nodos Docker con múltiples 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 disponibilidad para las aplicaciones. 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 de Enjambre», que es la gestión central y la orquestación del Enjambre Docker.

Este tutorial te mostrará cómo configurar Docker Swarm utilizando servidores Linux Rocky. Instalarás Docker en cada servidor, configurarás firewalld, inicializarás el Gestor del Enjambre y añadirás Nodos, y por último, también aprenderás el uso básico de Docker Swarm para desplegar aplicaciones en contenedores.

Requisitos previos

Para completar esta guía, necesitarás al menos tres servidores Linux Rocky y un usuario no root con privilegios sudo/administrador.

Para esta demostración, utilizaremos tres servidores Rocky Linux con los detalles que se indican a continuación:

Hostname            IP Address        Used as
---------------------------------------------------
swarm-manager1     192.168.5.100     Swarm Manager
worker1            192.168.5.120     Node
worker2            192.168.5.121     Node

Con todos estos requisitos, estás listo para iniciar las implementaciones de Docker Swarm.

Instalación de Docker

Para configurar Docker Swarm, debes instalar Docker Engine en cada máquina/servidor. Para la distribución Linux Rocky, puedes instalar Docker a través del repositorio oficial de Docker.

Ahora instalarás Docker Engine en cada uno de tus servidores Rocky Linux.

Añade el repositorio Docker para el sistema Rocky Linux mediante el siguiente comando dnf.

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Una vez añadido el repositorio, ejecuta el comando dnf de abajo para verificar la lista de repositorios y actualizar todos los paquetes.

sudo dnf repo list
sudo dnf update

Si el repositorio Docker está añadido, verás la salida que aparece a continuación:

añadir repo docker

A continuación, instala Docker mediante el siguiente comando dnf. Cuando se te pida que confirmes la instalación, introduce y y pulsa ENTER para continuar.

sudo dnf install docker-ce docker-ce-cli containerd.io

instalar docker

Una vez instalado Docker, inicia y activa el servicio «docker» mediante el comando systemctl que aparece a continuación. El servicio «docker» debería estar en marcha y se ejecutará automáticamente al arrancar el sistema.

sudo systemctl enable docker
sudo systemctl start docker

Por último, verifica el servicio «docker» utilizando el siguiente comando para asegurarte de que se está ejecutando.

sudo systemctl status docker

Si el servicio «docker» se está ejecutando, deberías obtener un resultado como el que se muestra a continuación.

comprobar servicio docker

Además, si quieres ejecutar Docker con un usuario que no sea root, debes añadir el usuario al grupo ‘docker‘ mediante el comando siguiente.

sudo usermod -aG docker user

Configurar Firewalld

Para el entorno de producción, debes habilitar el cortafuegos en cada servidor. En el sistema Rocky Linux por defecto, el firewalld está habilitado por defecto. Así que sólo tienes que añadir algunos puertos TCP y UDP para el despliegue de Docker Swarm.

A continuación se indican algunos de los puertos TCP y UDP que debes abrir en cada servidor para desplegar Docker Swarm y hacer que funcione correctamente:

  • Puerto TCP 2377 para las comunicaciones de gestión del clúster – esto es si tienes varios Gestores de Enjambre.
  • Puerto TCP y UDP 7946 para la comunicación entre nodos – para todos los nodos del entorno Swarm.
  • Puerto UDP 4789 para el tráfico de red superpuesta.

Añade los puertos de Docker Swarm al firewalld mediante el comando firewall-cmd que se indica a continuación.

sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent

A continuación, recarga las reglas del firewalld y verifica la lista de puertos en el firewalld mediante el comando que aparece a continuación.

sudo firewall-cmd --reload
sudo firewall-cmd --list-port

Deberías ver que se han añadido al firewalld algunos puertos TCP y UDP para la implementación de Docker Swarm.

recargar firewalld

Con el motor Docker instalado en cada servidor y la configuración de Firewalld, ya puedes configurar el despliegue de Docker Swarm inicializando el primer nodo como «Gestor de enjambres».

Inicializar el Gestor de Enjambres

Swarm Manager es el cerebro de tu entorno Docker Swarm. Para grandes despliegues, puedes añadir varios servidores como gestor de Swarm, lo que permite una alta disponibilidad y tolerancia a fallos de tu gestor de Swarm.

El Swarm Manager es el gestor de clústeres de tu Docker Swarm, gestiona el estado de tus despliegues de aplicaciones y también está integrado con Docker Engine. Swarm Manager proporciona un modelo de servicio declarativo y escalado de servicios, el estado deseado del servicio, y también proporciona actualizaciones continuas.

En este ejemplo, inicializaremos el servidor «swarm-manager1» con dirección IP «192.168.5.100» como Gestor del Enjambre.

Ejecuta el siguiente comando «docker swarm init» en el servidor «swarm-manager1» para empezar a inicializar el Gestor de Enjambres en tu despliegue.

En este ejemplo, el Gestor de Enjambres se ejecuta en la dirección IP «192.168.5.100» y la red por defecto para los servicios del Enjambre Docker será «10.10.0.0/16«.

docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16

Ahora deberías ver una salida similar a la siguiente captura de pantalla cuando se inicialice el Gestor del Enjambre. También puedes ver la instrucción que necesitas para añadir nodos trabajadores a tu despliegue de Docker Swarm, incluyendo el token generado que debes utilizar.

inicializar enjambre

A continuación, ejecuta el siguiente comando docker para verificar que el modo Enjambre está activado y habilitado.

docker info

Verás que el modo Swarm está «activo» y que la dirección IP de red para los servicios es «10.10.0.0/16«, que es la misma que la configurada durante el proceso de inicialización. Además, puedes ver que el nodo actual disponible en el Enjambre Docker es«1» solamente.

comprobar información del enjambre

Comprueba la lista de nodos disponibles en tu Enjambre Docker mediante el comando «docker node» que aparece a continuación. Y verás que sólo hay un nodo en tu despliegue Docker Swarm.

docker node ls

comprobar nodos

Añadir nodos trabajadores a Swarm

En Docker Swarm, el nodo trabajador tiene el mismo concepto que en otras orquestaciones de contenedores, que es donde se ejecutan y corren los contenedores. El motor Docker debe instalarse en cada nodo trabajador, y también el trabajador puede promocionarse como «Gestor del Enjambre».

Al mismo tiempo, el Gestor del Enjambre también puede utilizarse como nodo trabajador, lo que significa que tu aplicación también puede ejecutarse en el Gestor del Enjambre.

Ejecuta el siguiente comando «docker swarm join» para añadir los servidores «worker1» y «worker2» al Enjambre Docker. Además, asegúrate de sustituir el token por el token generado en tu entorno.

docker swarm join \
--token SWMTKN-1-4qxedy87gygenejrw06hlqpuwfm6erulccfj1jhnmsn0kehbnb-2ld4g3zo36bzu8d8ss4115rhq 192.168.5.100:2377

Cuando obtengas el mensaje de salida «Este nodo se unió a un enjambre como trabajador«, significa que se ha añadido el nodo trabajador.

Puedes ver un resultado similar cuando «trabajador1» y «trabajador2» se unen al Enjambre Docker.

unir nodo2

A continuación, ve de nuevo al Gestor de Enjambres y ejecuta el siguiente comando docker para verificar la lista de nodos de tu Enjambre Docker.

docker node ls

Deberías ver tres nodos en tu entorno Docker Swarm. En este ejemplo, el ‘swarm-manager1» se utiliza como Gestor del Enjambre, y los servidores «worker1» y «worker2» se utilizan como nodo trabajador.

comprobar nodos

Además, también puedes verificar la lista de nodos utilizando el siguiente comando docker.

docker info

En el servidor Swarm Manager, puedes ver el resultado en la siguiente captura de pantalla. Hay 1 gestor y 3 nodos (el gestor del enjambre también se utiliza como trabajador).

comprobar estado del enjambre

Pero, en los servidores«worker1» y«worker2«, verás la salida como la siguiente. Puedes ver la dirección IP del gestor de enjambres con el puerto TCP 2377 por defecto.

comprobar el estado del nodo

Llegados a este punto, has completado el despliegue de Docker Swarm utilizando Rocky Linux. A continuación, desplegarás la aplicación/servicio en tu entorno Swarm.

Gestión de servicios en Docker Swarm

Cuando despliegues una aplicación en el entorno Docker Swarm, esa aplicación se llamará «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.

Para desplegar un servicio en Docker Swarm, debes especificar la imagen base que vas a utilizar, los puertos, el nombre concreto de tu servicio, y también el número de réplicas de tu servicio.

Ahora aprenderás el despliegue básico de tus servicios en Docker Swarm.

En este ejemplo, crearás un nuevo servicio «test-httpd» con 1 ré plica y expondrás el puerto «8000» en el nodo Swarm. La imagen que utilizarás es «httpd:alpine«.

Ejecuta el siguiente comando«docker service» para crear un nuevo servicio.

docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine

crear servicio

Ahora verifica los servicios en tu Enjambre Docker mediante el siguiente comando docker. Deberías ver que el servicio «test-httpd» se está ejecutando y que también está expuesto el puerto TCP 8000 con sólo 1 réplica.

docker service ls

servicio de listas

A continuación, comprueba los detalles de tu servicio «test-httpd» mediante el comando que aparece a continuación.

docker service inspect test-httpd
docker service inspect --pretty test-httpd

A continuación puedes ver el servicio detallado de «test-httpd».

detalles del servicio

Además, puedes comprobar el contenedor que se ejecuta en el servicio «test-httpd» mediante el comando «docker service» como se indica a continuación.

docker service ps test-httpd

Puedes ver que el contenedor «test-httpd.1» se está ejecutando en el servidor «swarm-manager1«.

comprueba los contenedores

Ahora abre el puerto «8000» en todos los servidores mediante el siguiente comando firewall-cmd.

sudo firewall-cmd --add-port=8000/tcp

Después, verifica el servicio «test-httpd» utilizando el comando curl como se indica a continuación. En este ejemplo, la dirección IPde «swarm-manager1» es«192.168.5.100«.

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

Verás la página index.html por defecto del servicio «test-httpd«.

contenedores de acceso

Escalado de servicios en Docker Swarm

Después de haber desplegado el servicio en Docker Swarm, ahora aprenderás a escalar tus servicios y aplicaciones.

Ejecuta el siguiente comando para escalar el servicio «test-httpd» a 3 réplicas. Este comando creará otros dos servicios de «test-httpd» en nodos trabajadores.

docker service scale test-httpd=3

servicio de báscula

Ahora, verifica la lista de servicios en ejecución utilizando el siguiente comando. Deberías ver que se está ejecutando otro servicio «test-httpd» en los servidores «worker1» y «worker2».

docker service ps test-httpd

comprobar servicios

Por último, verifica el servicio mediante el comando curl como se indica a continuación en ambos servidores «worker1» y «worker2». Si el servicio está funcionando, deberías ver la página index.html por defecto en tu pantalla.

Comprobando el servicio en worker1.

docker ps
curl worker1:8000

trabajador del servicio de acceso1

Comprobando el servicio en worker2.

docker ps
curl worker2:8000

servicio de acceso nodo2

Eliminar servicios en Docker Swarm

Has aprendido los servicios básicos de despliegue y escalado en Docker Swarm. A continuación, limpiarás tu entorno Docker Swarm eliminando el servicio «test-httpd».

Ejecuta el siguiente comando para eliminar el servicio «test-httpd» del Enjambre Docker.

docker service rm test-httpd

Después, verifica el servicio «test-httpd» mediante el siguiente comando«docker service inspect«. Deberías ver que el servicio se ha eliminado.

docker service inspect test-httpd

Además, también puedes verificar mediante el comando docker de abajo la lista de contenedores e imágenes en ejecución en tu Enjambre.

Deberías ver que el contenedor se ha eliminado y que la imagen httpd:alpine está disponible en todos los servidores.

docker ps
docker images

Conclusión

En esta guía, has desplegado el Enjambre Docker con tres servidores Rocky Linux. También has aprendido la instalación de Docker Engine en un servidor Linux y la configuración de Firewalld en el sistema Rocky Linux. Y por último, también has aprendido el despliegue básico de aplicaciones en Docker Swarm mediante el comando «docker service».

A partir de aquí, ya puedes desplegar tus aplicaciones en contenedores con todas las dependencias al Enjambre Docker. También puedes añadir más Swarm Manager para configurar la alta disponibilidad de tu entorno Docker Swarm.

También te podría gustar...