Cómo instalar Docker Swarm en Debian 11

Docker Swarm es una orquestación de contenedores basada en Docker Engine. Te permite crear y desplegar un clúster de nodos Docker con múltiples servidores. Docker Swarm simplifica el despliegue de tu aplicación en contenedores en un servicio. Docker Swarm proporciona una forma sencilla y directa de gestionar y orquestar contenedores.

Docker Swarm proporciona un alto nivel de disponibilidad para las aplicaciones. En Docker Swarm, puedes ejecutar una única aplicación o servicio en varios nodos llamados «nodos trabajadores». También hay un nodo llamado «Swarm Manager» que proporciona gestión centralizada y orquestación de Docker Swarm.

Este tutorial te muestra cómo configurar Docker Swarm en servidores Debian 11. Instalarás Docker, configurarás el UFW (Uncomplicated Firewall), inicializarás el «Gestor de Enjambres» y añadirás «Nodos». También aprenderás el uso básico de Docker Swarm para desplegar aplicaciones.

Requisitos previos

Para completar este tutorial, necesitarás varios servidores Debian 11 y un usuario no root con privilegios de administrador sudo/root.

En esta demostración, utilizaremos tres servidores Debian 11 con los siguientes detalles:

Hostname    IP Address        Used as
-------------------------------------
manager     192.168.5.100     Swarm Manager
node1       192.168.5.120     Node
node2       192.168.5.121     Node

Con todos estos requisitos, estás listo para empezar.

Instalar Docker

El repositorio por defecto de Debian proporciona un paquete para Docker. Pero, para asegurarte de que estás instalando la última versión de Docker, instalarás Docker a través del repositorio oficial de Docker.

Además, debes instalar Docker en todos tus servidores Debian.

Antes de añadir el repositorio, ejecuta el siguiente comando apt para instalar algunos paquetes básicos. Cuando se te pida que confirmes la instalación, introduce Y y pulsa INTRO.

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y

instalar dependencias

Después de instalar los paquetes básicos, añade la clave GPG para el repositorio Docker utilizando el siguiente comando. Con este comando, crearás un nuevo directorio«/etc/apt/keyrings» y almacenarás en él la clave GPG del repositorio Docker.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

A continuación, añade el repositorio Docker para el sistema Debian Linux utilizando el comando siguiente.

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Ahora, actualiza y refresca tu índice de paquetes mediante el siguiente comando apt.

sudo apt update

Verás que se actualiza el nuevo repositorio Docker.

añadir repositorio

A continuación, instala los paquetes Docker utilizando el siguiente comando apt. Se te pedirá que confirmes la instalación, introduce Y para confirmar y pulsa ENTER para continuar.

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

instalar docker

Después de instalar Docker, ejecuta el siguiente comando para iniciar y habilitar el servicio ‘docker‘. Esto permite que ‘docker’ se ejecute automáticamente al arrancar el sistema.

sudo systemctl start docker
sudo systemctl enable docker

Por último, verifica el servicio ‘docker‘ mediante el siguiente comando systemctl.

sudo systemctl status docker

Si el servicio «docker» se está ejecutando, deberías ver una salida como la de la siguiente captura de pantalla:

comprobar el estado del servicio

Además, si tienes previsto utilizar un usuario no root para tu despliegue, debes añadir tu usuario a ‘docker‘ y permitirle que ejecute contenedores Docker.

sudo usermod -aG docker user

Configurar el cortafuegos

Si vas a desplegar Docker Swarm para producción, debes configurar el cortafuegos entre todos los nodos. En este ejemplo, utilizarás UFW como cortafuegos por defecto para tus servidores Debian.

A continuación se indican algunos puertos que debes abrir para que Docker Swarm funcione correctamente:

  • Puerto TCP 2377 para las comunicaciones de gestión del clúster: se utiliza si tienes varios Swarm Manager.
  • 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.

Instala UFW en tus sistemas Debian utilizando el siguiente comando apt.

sudo apt install ufw -y

Una vez instalado UFW, ejecuta el siguiente comando‘ufw‘ para añadir el perfil de aplicación«OpenSSH«. A continuación, inicia y activa UFW.

Durante el proceso, se te pedirá que confirmes si deseas ejecutar y habilitar el cortafuegos UFW. Introduce y para confirmar y pulsa ENTER para continuar.

sudo ufw allow "OpenSSH"
sudo ufw enable

activar cortafuegos ufw

Ahora ejecuta el siguiente comando ufw para abrir algunos puertos para Docker Swarm.

sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp

Por último, comprueba la lista de reglas UFW habilitadas en tu servidor mediante el siguiente comando ufw. Asegúrate de que todos los puertos para Docker Swarm están habilitados y disponibles en UFW.

sudo ufw status

comprobar cortafuegos

Llegados a este punto, ya tienes Docker instalado y el UFW configurado. A continuación, vamos a inicializar Swarm Manager.

Inicializar Swarm Manager

Swarm Manager es el centro del despliegue de Docker Swarm. Gestiona por sí mismo el estado del enjambre y no tiene límite en el número de nodos gestores. El despliegue de varios Swarm Manager creará un entorno de tolerancia a fallos.

El Gestor de Enjambre es un gestor de enjambre integrado en el Motor Docker. Proporciona un modelo de servicio declarativo, escalado de servicios, estado deseado de servicios, equilibrio de carga y actualizaciones continuas.

En este ejemplo, inicializarás un nodo como Gestor del Enjambre.

Para inicializar el Gestor de Enjambre, ejecuta el siguiente comando docker. En este ejemplo, el Gestor de Enjambres se ejecutará en la dirección IP 192.168.5.30. Y la red para los contenedores en el entorno Docker Swarm será 10.20.0.0/16.

docker swarm init --advertise-addr 192.168.5.30 --default-addr-pool 10.20.0.0/16

Cuando se inicialice el Gestor de Enjambres, verás la siguiente salida. También puedes ver el token de detalles para unir Nodos al gestor de Enjambres.

inicializar el gestor de enjambres

Ahora, ejecuta el siguiente comando docker para verificar que el modo Enjambre está activado.

docker info

En la siguiente captura de pantalla, puedes ver que el modo Enjambre está«activo» con el pool de direcciones IP«10.20.0.0/16«. Además, el nodo actual que está disponible en el Enjambre Docker es«1«.

comprobar modo enjambre

Puedes verificar la lista de nodos en el Enjambre Docker mediante el comando docker que aparece a continuación. Deberías ver que sólo hay un nodo en el Enjambre Docker actual, que es el Gestor del Enjambre.

docker node ls

nodo de lista de comprobación

Añadir nodos trabajadores al enjambre

Los nodos trabajadores es donde se ejecutan y ejecutan los contenedores. En el nodo trabajador, el Motor Docker debe estar instalado en cada servidor, y además el nodo trabajador puede promocionarse como Gestor del Enjambre.

Para añadir un nodo trabajador, puedes utilizar el comando «docker swarm join» seguido del token que se genera al inicializar el Gestor del Enjambre.

Añade los servidores«nodo1» y«nodo2» al Enjambre Docker mediante el comando «docker swarm join» que aparece a continuación. Puedes sustituir el token por tu token generado durante la inicialización del Gestor de Enjambres.

docker swarm join \
--token SWMTKN-1-5tui5dveqw6n2b0m6suut0w7nf9w0wb5jyvfhmykb4jdehps1j-ag99f7750mmnim6ao5yp0x3s2 \
192.168.5.30:2377

Cuando se añada el nodo, obtendrás el mensaje de salida«Este nodo se ha unido a un enjambre como trabajador«.

A continuación se muestra la salida que verás en los servidores«nodo1» y«nodo2».

unir nodo1

Además, si has perdido el token del enjambre para unirte al nodo trabajador, puedes mostrarlo utilizando el siguiente comando.

docker swarm join-token worker

Por último, vuelve al servidor «gestor» y comprueba la lista de nodos de tu entorno Docker Swarm mediante el siguiente comando«docker«.

docker node ls

En la siguiente captura de pantalla, puedes ver que tanto el«nodo1» como el«nodo2» se han añadido al Enjambre Docker con el estado«Listo» y el motor docker«20.10.18«.

comprobar nodo ls

El despliegue del Enjambre Docker se ha completado, ahora puedes desplegar tu aplicación en contenedores en el Enjambre.

Gestión de Servicios en Docker Swarm

Servicio es un término de despliegue de aplicaciones en Docker Swarm. Es la imagen de tus microservicios, puede ser un servidor HTTP, un servidor de base de datos u otras aplicaciones que se ejecutarán en tu Docker Swarm.

Para configurar un servicio en Docker Swarm, debes especificar la imagen que utilizarás, el puerto que se expondrá y también el número de réplicas.

Después de haber desplegado Docker Swarm, ahora aprenderás el despliegue básico de tus servicios en Docker Swarm.

Crea un nuevo servicio «test-httpd» mediante el comando «docker service create» como se indica a continuación.

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

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

ejecutar servicio

Una vez que el servicio «test-httpd» se esté ejecutando, verifícalo utilizando el siguiente comando. Deberías ver que el servicio «test-httpd» se está ejecutando con 1 réplica y expone el puerto TCP 8000.

docker service ls

servicio de listas

Ahora, ejecuta el siguiente comando para comprobar los detalles del servicio «test-httpd».

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

A continuación puedes ver el servicio detallado de «test-httpd», que incluye el número de réplicas, los puertos externos, la imagen base que está utilizando, etc.

inspeccionar el servicio

También puedes comprobar el contenedor en ejecución del servicio «test-httpd» mediante el comando «docker service ps», 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 «manager».

lista de contenedores en funcionamiento

Ahora abre el puerto «8000» en todos los servidores mediante el siguiente comando ufw.

sudo ufw allow 8000/tcp

A continuación, verifica el servicio «test-httpd» utilizando el comando curl como se indica a continuación. 192.168.5.30″ es la dirección IP del Gestor del Enjambre y el servicio «test-httpd» se está ejecutando en el puerto 8000.

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

Verás la página predeterminada index.html del servicio «test-httpd».

servicio de acceso

Escalar servicios en Docker Swarm

Ahora aprenderás a escalar tus servicios en Docker Swarm.

Ejecuta el siguiente comando para escalar el servicio «test-httpd» a 3 réplicas.

docker service scale test-httpd=3

servicio de báscula

Ahora verifica el contenedor en ejecución en el servicio «test-httpd» utilizando el comando siguiente. Deberías ver tres contenedores diferentes en el servicio «test-http», que se está ejecutando en el gestor de servidores, en el nodo1 y en el nodo2.

docker service ps test-httpd

servicio de listas

Por último, ejecuta el siguiente comando docker para verificar el contenedor en ejecución en los servidores nodo1 y nodo2. Deberías ver que el contenedor con el nombre «prueba-httpd.nombrealeatorio» se está ejecutando en ambos servidores. Además, puedes ver que el contenedor es accesible a través del puerto TCP 8000.

Comprobando el contenedor en el nodo1.

docker ps
curl node1:8000

comprobación desde nodo1

Comprobando el contenedor en el nodo2.

docker ps
curl node2:8000

comprobar nodo2

Eliminar servicios en Docker Swarm

Ahora es el momento de limpiar tu entorno eliminando los servicios que has desplegado en Docker Swarm.

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

docker service rm test-httpd

A continuación, verifica el servicio «test-httpd» mediante el comando «docker service inspect» que aparece a continuación. Deberías ver que el servicio se ha eliminado.

docker service inspect test-httpd

servicio suprimido

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

comprobar servicio eliminado

Conclusión

En este tutorial, has desplegado el Enjambre Docker con tres servidores Debian 11. También has aprendido la instalación básica del motor Docker en un servidor Linux y la configuración básica del cortafuegos UFW en un sistema Debian. 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...