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
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 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
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:
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
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
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.
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«.
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
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».
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«.
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
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
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.
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».
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».
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
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
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
Comprobando el contenedor en el nodo2.
docker ps curl node2:8000
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
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 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.