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 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
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.
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.
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.
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.
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
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.
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.
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).
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.
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
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
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».
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«.
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«.
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
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
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
Comprobando el servicio en worker2.
docker ps curl worker2:8000
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.