Ir al contenido principal

Guía completa de instalación de Docker Swarm: Cómo desplegar, gestionar y escalar servicios en un entorno de clúster

Prepárate para llevar tus aplicaciones al siguiente nivel con Docker Swarm, la herramienta de orquestación de contenedores más potente. En esta guía, te mostraremos cómo instalar y configurar Docker Swarm, paso a paso, para que puedas desplegar, gestionar y escalar tus servicios de manera sencilla y eficiente en un entorno de clúster. Además, descubrirás cómo automatizar tareas utilizando Ansible y Jenkins, optimizando tu proceso de configuración y despliegue. ¡Es hora de aprovechar al máximo el poder de Docker Swarm y llevar tu infraestructura a nuevas alturas de rendimiento y flexibilidad.

A continuación la tabla de contenido:

  1. Instalación de Docker Swarm: Cómo desplegar, gestionar y escalar servicios en un entorno de clúster
    1. Requisitos previos para instalar Docker Swarm
    2. Creación de Docker Swarm 
    3. Consideraciones para elegir la cantidad adecuada de nodos 
    4. Escenario práctico con un nodo manager y dos workers
    5. Portainer
    6. Réplicas y escalado 
    7. Actualizar el servicio
    8. Etiquetar nodos 
    9. Docker secrets
    10. Eliminar el servicio
    11. Uso de Ansible y Docker Swarm 
  2. Jenkins + Ansible + Docker Swarm
  3. Conclusión

1. Instalación de Docker Swarm: Cómo desplegar, gestionar y escalar servicios en un entorno de clúster

1.1 Requisitos previos para instalar Docker Swarm

Antes de instalar Docker Swarm, es necesario tener un sistema operativo compatible y cumplir con algunos requisitos previos. A continuación, se describen los requisitos previos para instalar Docker Swarm:

Sistema operativo

Docker Swarm es compatible con varios sistemas operativos, incluyendo Linux, Windows y macOS. Se recomienda tener la versión más reciente del sistema operativo instalada para garantizar la compatibilidad con Docker.

Docker Engine

Es necesario tener Docker instalado en el sistema antes de instalar Docker Swarm. Docker es el motor que permite la creación y ejecución de contenedores en el sistema.

Configuración de red

 Para que los nodos de Docker Swarm se comuniquen entre sí, es necesario tener una red configurada. Se recomienda usar una red overlay para permitir la comunicación entre los contenedores que se ejecutan en diferentes nodos.

Nodos

Es necesario tener al menos dos nodos disponibles para crear un clúster de Docker Swarm. Los nodos pueden ser físicos o virtuales y deben estar conectados en la misma red.

Una vez que se han cumplido los requisitos previos, se puede proceder con la instalación de Docker Swarm en el sistema. Es importante seguir las instrucciones de instalación de manera cuidadosa y asegurarse de configurar correctamente el clúster para garantizar su correcto funcionamiento.

1.2 Creación de Docker Swarm

Una vez que se tiene Docker instalado, se puede seguir los siguientes pasos para configurar un cluster de Docker Swarm:

  1. Inicie una sesión de Docker en el sistema que se desea utilizar como el nodo maestro del cluster.
  2. Ejecuta el comando “docker swarm init” para inicializar el modo swarm en el nodo maestro. Este comando generará un token de unión que se utilizará para unir otros nodos al clúster.
  3. Una vez que el modo swarm está inicializado, se pueden unir otros nodos al cluster mediante el comando “docker swarm join” y proporcionando el token de unión generado en el paso anterior.
  4. Para verificar que los nodos han sido unidos correctamente al cluster, se puede ejecutar el comando “docker node ls” en el nodo maestro. Esto mostrará una lista de todos los nodos unidos al cluster.
  5. Para crear un servicio en el cluster, se utiliza el comando “docker service create” y se especifican los detalles del servicio, como la imagen del contenedor, el puerto, etc.
  6. Para escalar un servicio, se utiliza el comando “docker service scale” y se especifica la cantidad deseada de réplicas del servicio.
  7. Para ver el estado de los servicios en el cluster, se puede utilizar el comando “docker service ls”.

Con estos pasos se tiene un cluster de Docker Swarm listo para usar, el cual permite escalar servicios de manera automática, equilibrar la carga entre los nodos del cluster y garantizar la disponibilidad de las aplicaciones.

1.3 Consideraciones para elegir la cantidad adecuada de nodos

La cantidad de nodos recomendada para usar en un cluster de Docker Swarm depende de varios factores, como el tamaño y la complejidad de la aplicación, así como del rendimiento y disponibilidad requeridos. En general, se recomienda tener al menos tres nodos en un cluster de producción, para garantizar alta disponibilidad y tolerancia a fallos.

Sin embargo, también es importante tener en cuenta que agregar más nodos al cluster puede aumentar la complejidad de la configuración y la administración, y también puede aumentar los costos de infraestructura. Por lo tanto, es importante evaluar cuidadosamente las necesidades de su aplicación y su presupuesto antes de decidir cuántos nodos agregar al clúster.

1.4 Escenario práctico con un nodo manager y dos workers

Vamos a crear un entorno de prueba utilizando Vagrant, en el cual configuraremos un cluster de Docker Swarm con un nodo manager y dos nodos workers.

Escenario de docker swarm con 1 nodo manager y 2 workers

1. Imagen Escenario de docker swarm con 1 nodo manager y 2 workers

Para configurar este escenario, se deben seguir los siguientes pasos:

A continuación, adjunto el archivo Vagrantfile del escenario, para que puedan replicarlo en Vagrant, si así lo desean.

Vagrant.configure("2") do |config|
  config.vm.define "manager" do |manager|
    manager.vm.box = "ubuntu/focal64"
    manager.vm.hostname = "manager.local"
    manager.vm.network "private_network", ip: "192.168.56.4"
    manager.vm.network :public_network,:bridge=>"enp3s0"
    config.vm.provider "virtualbox" do |vb|
      vb.memory = "4096"
    end
  end
  config.vm.define "worker1" do |worker1|
    worker1.vm.box = "ubuntu/focal64"
    worker1.vm.hostname = "worker1.local"
    worker1.vm.network "private_network", ip: "192.168.56.5"
    worker1.vm.network :public_network,:bridge=>"enp3s0"
  end
  config.vm.define "worker2" do |worker2|
    worker2.vm.box = "ubuntu/focal64"
    worker2.vm.hostname = "worker2.local"
    worker2.vm.network "private_network", ip: "192.168.56.6"
    worker2.vm.network :public_network,:bridge=>"enp3s0"
  end
end

Luego del despliegue, procedemos a instalar Docker en todas las máquinas.

Inicio del cluster

El comando “docker swarm init –advertise-addr” se utiliza para inicializar un nuevo cluster de Docker Swarm y especificar la dirección IP o nombre de host que se utilizará para anunciar el nodo manager en el clúster. Esta dirección se utilizará para que los nodos worker se conecten al cluster y se registren en el manager.

La opción “–advertise-addr” especifica la dirección IP o nombre de host que se usará para anunciar el nodo manager en el cluster. Si no se especifica esta opción, Docker Swarm utilizará la dirección IP predeterminada del sistema. Es importante especificar una dirección IP o nombre de host que sea accesible desde los nodos worker que se unirán al clúster.

vagrant@manager:~$ ip a

4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:aa:e5:e9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.129/24 brd 192.168.1.255 scope global dynamic enp0s9
       valid_lft 85923sec preferred_lft 85923sec
    inet6 fe80::a00:27ff:feaa:e5e9/64 scope link 
       valid_lft forever preferred_lft forever

vagrant@manager:~$ docker swarm init --advertise-addr 192.168.1.129
Swarm initialized: current node (v8v3rx3xidhukg7grxjrsyfhb) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2i6w0b1r1bl9ujoiqve2qyr5jdg4tpdt87svju0u7aj26cay75-3u5ce967axholeyf4xj5gx3y0 192.168.1.129:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Enlazar con los workers

El comando “docker swarm join” se utiliza para unir un nodo existente a un clúster de Docker Swarm ya existente. Este comando se ejecuta en el nodo que se desea unir al clúster y requiere un token de unión generado previamente en el nodo manager del clúster. Una vez que se ha unido el nodo al clúster, se pueden desplegar servicios en él y se beneficiará de las características de escalabilidad y disponibilidad proporcionadas por Docker Swarm.

vagrant@worker1:~$ docker swarm join --token SWMTKN-1-2i6w0b1r1bl9ujoiqve2qyr5jdg4tpdt87svju0u7aj26cay75-3u5ce967axholeyf4xj5gx3y0 192.168.1.129:2377
This node joined a swarm as a worker.

vagrant@worker2:~$ docker swarm join --token SWMTKN-1-2i6w0b1r1bl9ujoiqve2qyr5jdg4tpdt87svju0u7aj26cay75-3u5ce967axholeyf4xj5gx3y0 192.168.1.129:2377
This node joined a swarm as a worker.

Agregando los nodos workers

2. Imagen Agregando los nodos workers

Listar nodos

El comando docker node ls es un comando de Docker Swarm que se utiliza para listar todos los nodos unidos al clúster. Este comando se ejecuta en el nodo manager del cluster y muestra información básica sobre cada nodo, como su ID, nombre, estado y dirección IP.

El comando docker node ls también permite filtrar los nodos que se muestran en la salida mediante el uso de opciones adicionales como “–filter” o “–quiet”. Por ejemplo, se puede utilizar la opción “–filter role=worker” para ver sólo los nodos worker del cluster.

vagrant@manager:~$ docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
v8v3rx3xidhukg7grxjrsyfhb *   manager    Ready     Active         Leader           20.10.23
hdje1ueuvr5hx5a3m31t2lkta     worker1    Ready     Active                          20.10.23
0tblr3pgc5oq7w89kh46qozjv     worker2    Ready     Active                          20.10.23

Despliegue del primer servicio en el cluster

Desplegar un servicio en un clúster de Docker Swarm es un proceso sencillo que le permite escalar y administrar sus aplicaciones de forma eficiente. Con un clúster, puede asegurar una alta disponibilidad y tolerancia a fallos, lo que es especialmente importante para aplicaciones críticas.

Crear red

Para crear una red personalizada en Docker Swarm y asociarla a un servicio de WordPress, se pueden utilizar los comandos docker network create y docker service create.

Por ejemplo, para crear una red llamada “my-network” ejecutaremos el siguiente comando:

vagrant@manager:~$ docker network create --driver overlay my-network
5f1aqbozitf0jdx0e0ja0wbp1

Una vez creada la red, se puede utilizar para crear el servicio, utilizando el comando docker service create y especificando la opción –network para conectarse a la red personalizada.

Crear servicio

Una vez que se ha iniciado sesión en el clúster, se puede crear un servicio en Docker Swarm utilizando el comando docker service create. Este comando acepta varios parámetros, como el nombre del servicio, la imagen de Docker a utilizar y las opciones de red y de volumen.

Por ejemplo, para crear un servicio llamado “mi-servicio” que utiliza la imagen “mi-imagen” y escucha en el puerto 80, ejecute el siguiente comando:

docker service create --name mi-servicio --publish 80:80 mi-imagen

La opción –name especifica el nombre del servicio, mientras que la opción –publish indica que el servicio debe escuchar en el puerto 80 del host y exponerlo en el puerto 80 del contenedor.

Vamos a ver un ejemplo de despliegue del servicio WordPress. Desplegar WordPress en un clúster de Docker Swarm es un proceso que consiste en crear dos servicios, uno para la base de datos y otro para la aplicación de WordPress.

MySQL

Es necesario crear un servicio para la base de datos, en este caso se recomienda usar una imagen de mariadb o mysql.

vagrant@manager:~$ docker service create --name mysqldb --constraint 'node.role == worker' --network my-network --env MYSQL_ROOT_PASSWORD=mypassword --env MYSQL_DATABASE=wordpress --env MYSQL_USER=wpuser --env MYSQL_PASSWORD=wppassword mariadb:latest
9zr2rp3l3juqseqcf3bi02s98
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged

En este ejemplo, se está creando un servicio llamado “mysqldb” que utiliza la imagen “mariadb:latest”, se establecen las variables de entorno para especificar la contraseña de root, el nombre de la base de datos, el usuario y la contraseña.

El parámetro –constraint ‘node.role == worker’ es utilizado en el comando docker service create para especificar una restricción en la creación del servicio, indicando que el servicio solo debe ser ejecutado en los nodos del clúster con el rol “worker”. El rol de un nodo en Docker Swarm puede ser “manager” o “worker” y se utiliza para identificar los nodos que actúan como líderes o como trabajadores en el clúster.

WordPress

Una vez creado el servicio de la base de datos, podemos crear el servicio de WordPress utilizando el comando docker service create.

vagrant@manager:~$ docker service create --name wordpress --constraint 'node.role == worker' --network my-network --env WORDPRESS_DB_HOST=mysqldb --env WORDPRESS_DB_USER=wpuser --env WORDPRESS_DB_PASSWORD=wppassword --env WORDPRESS_DB_NAME=wordpress --replicas 3 --publish 80:80 wordpress:latest
dfelq7oumbhfojx0qx2f7ig7t
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

En este ejemplo, se está creando un servicio llamado “wordpress” que utiliza la imagen “wordpress:latest”, se está conectando al red “my-network”, se establecen 3 réplicas, se está publicando el puerto 80 del host al puerto 80 del contenedor, se establecen las variables de entorno para conectarse a la base de datos y se establece el nombre de la base de datos.

Portainer

Siguiendo con el proceso de despliegue, vamos a crear el servicio de Portainer utilizando el comando docker service create. A continuación, se presenta un ejemplo de cómo crear el servicio de Portainer de manera eficiente:

vagrant@manager:~$ docker service create --name portainer --publish 9000:9000 --constraint 'node.role == manager' --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock portainer/portainer
oilvsqvlqkdwy7366j3q94c7x
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged

En este ejemplo, se está creando un servicio llamado “portainer” que utiliza la imagen “portainer/portainer”, se está publicando el puerto 9000 del host al puerto 9000 del contenedor, se establece una restricción para que solo se ejecute en los nodos manager del clúster y se monta el socket de docker para que portainer pueda interactuar con el daemon de docker.

Listar servicios

Una vez creados los servicios, se pueden verificar su estado con el comando docker service ls. Si todo está funcionando correctamente, debería ver los servicios “mysqldb”, “wordpress” y “portainer” en la lista con el estado “Running” y las réplicas establecidas.

Se proporcionan dos listados: Uno de servicios y otro de contenedores, con el fin de visualizar la asignación y distribución de recursos de manera clara y organizada.

3. Imagen Se proporcionan dos listados: Uno de servicios y otro de contenedores, con el fin de visualizar la asignación y distribución de recursos de manera clara y organizada.

Ahora que ya se tiene desplegado wordpress en el cluster, podemos acceder a la aplicación web utilizando el comando docker service inspect para obtener la dirección IP del nodo donde se encuentra el servicio y el puerto publicado. En este caso, la aplicación web estaría disponible en http://[IP-NODO]:80 

Pantalla de instalación de WordPress

4. Imagen Pantalla de instalación de WordPress

1.5 Portainer

Portainer es una herramienta de software de código abierto que proporciona una interfaz gráfica de usuario (GUI) para la gestión de contenedores de Docker. Con Portainer, se puede ver una vista general de todos los contenedores y servicios en ejecución en el clúster de Docker, gestionar y monitorear los contenedores y servicios, crear y escalar servicios, y realizar muchas otras tareas relacionadas con la administración de contenedores. La principal ventaja de Portainer es que permite a los usuarios interactuar con el clúster de Docker de una manera fácil e intuitiva, sin necesidad de utilizar comandos de línea de comandos complejos.

Para acceder a la interfaz de Portainer, simplemente abra un navegador web y vaya a la dirección http://[IP-NODO]:[PUERTO-PUBLICADO].

Una vez que se accede a la interfaz, se puede utilizar un usuario y una contraseña para iniciar sesión. Por defecto, Portainer no tiene un usuario y contraseña establecidos, así que se puede crear uno durante el primer inicio de sesión. Una vez que se haya iniciado sesión, se tendrá acceso a la interfaz de gestión de contenedores de Portainer.

Imagen Pantalla de inicio de sesión y creación de contraseña del Portainer

5. Imagen Pantalla de inicio de sesión y creación de contraseña del Portainer

Página principal de Portainer

La página principal de Portainer es donde se presenta una vista general de todos los entornos (o “environments”) disponibles en el sistema, en el caso de una instalación local solo se mostrará “local” como opción, al hacer clic en ella se accede a las opciones de configuración y gestión de contenedores y servicios en ese entorno específico.

Pantalla de inicio de sesión y creación de contraseña del Portainer

6. Imagen Pantalla de inicio del Portainer

Dashboard

En la página de Dashboard de Portainer, se pueden encontrar varias funciones y características que te permiten ver y gestionar tus contenedores y servicios, aquí te menciono algunos ejemplos:

  • Información general del sistema: en la página de Dashboard se puede ver información general sobre el sistema, como el número total de contenedores, servicios, nodos, etc.
  • Estadísticas de uso de recursos: en la página de Dashboard se pueden ver estadísticas de uso de recursos, como el uso de la CPU, la memoria, el almacenamiento, etc.
  • Gráficos: en la página de Dashboard se pueden ver gráficos interactivos que muestran el uso de los recursos en tiempo real.
  • Indicadores de estado: en la página de Dashboard se pueden ver indicadores de estado que muestran el estado de los contenedores y servicios, como si están en ejecución, detenidos, etc.
  • Acciones rápidas: en la página de Dashboard se pueden encontrar acciones rápidas que permiten realizar tareas comunes, como iniciar o detener contenedores o servicios.
  • Notificaciones: en la página de Dashboard se pueden ver notificaciones en caso de que ocurra algún evento relevante en el sistema, como un contenedor que se detiene o un servicio que falla.
  • Acceso a las secciones del sistema: desde el Dashboard se puede acceder a las diferentes secciones del sistema como contenedores, servicios, volúmenes, redes y usuarios.

En resumen, la página de Dashboard de Portainer es una vista general de toda la información relacionada con los contenedores y servicios en ejecución en el sistema, así como herramientas para gestionarlos de manera eficiente.

Pantalla de Dashboard del Portainer

7. Imagen Pantalla de Dashboard del Portainer

Lista de servicios:

La página de Lista de Servicios en Portainer es donde se pueden ver y gestionar todos los servicios en ejecución en el clúster de Docker. En esta página se puede ver una lista de todos los servicios, incluyendo detalles como el nombre del servicio, el estado actual, el número de réplicas, el uso de recursos, el endpoint, entre otros.

Desde la página de Lista de Servicios, se pueden realizar varias acciones, tales como:

  • Ver detalles de un servicio específico: haciendo clic en un servicio en la lista, se pueden ver detalles adicionales sobre ese servicio, como la configuración, los contenedores asociados, los registros, entre otros.
  • Escalar servicios: se puede cambiar el número de réplicas de un servicio.
  • Detener o iniciar servicios: se puede detener o iniciar un servicio seleccionado.
  • Eliminar servicios: se puede eliminar un servicio seleccionado.

Pantalla de servicios tanto activos como inactivos

8. Imagen Pantalla de servicios tanto activos como inactivos

Logs

La página de registros (logs) en Portainer te permite ver los registros de los contenedores y servicios que están ejecutándose en tu clúster de Docker. Los registros pueden ser útiles para detectar problemas, depurar errores o simplemente para tener una mejor comprensión de lo que está sucediendo en tu sistema.

Desde la página de registros, se pueden ver los registros de un contenedor o servicio específico, además de tener opciones para filtrar los registros por fecha, nivel de registro, entre otros. También se puede ver los registros en tiempo real, lo que permite ver los eventos que están sucediendo en tiempo real.

Pantalla de registros de logs

9. Imagen Pantalla de registros de logs

Conclusiones sobre Portainer

Estas son solo algunas de las muchas posibilidades que nos ofrece Portainer, ya que es una herramienta muy completa y versátil que permite a los usuarios tener un mejor control y visibilidad sobre sus contenedores y servicios en un clúster de Docker. Además de las funciones mencionadas anteriormente, Portainer también ofrece otras funciones avanzadas como la gestión de volúmenes, redes, usuarios y permisos, la creación y gestión de plantillas para servicios, entre otras. Con Portainer, los usuarios pueden automatizar y simplificar muchas de las tareas de administración de contenedores, lo que les permite ahorrar tiempo y esfuerzo y enfocarse en el desarrollo y la implementación de sus aplicaciones.

1.6 Réplicas y escalado

El comando docker service scale se utiliza para escalar un servicio existente en un clúster de Docker Swarm. Este comando permite aumentar o disminuir el número de réplicas (instancias) de un servicio. Esto significa que puedes aumentar o disminuir el número de contenedores que se ejecutan para un servicio determinado.

El comando tiene la siguiente sintaxis:

docker service scale [OPTIONS] SERVICE=REPLICAS

 

Dónde SERVICE es el nombre del servicio que se desea escalar y RÉPLICAS es el nuevo número de réplicas que se desea. Por ejemplo, si quieres escalar el servicio “wordpress” a cuatro réplicas, utilizarías el siguiente comando:

vagrant@manager:~$ docker service scale wordpress=4
wordpress scaled to 4
overall progress: 4 out of 4 tasks 
1/4: running   [==================================================>] 
2/4: running   [==================================================>] 
3/4: running   [==================================================>] 
4/4: running   [==================================================>] 
verify: Service converged

Visualizando la escalabilidad de un servicio

10. Imagen Visualizando la escalabilidad de un servicio

El comando docker service scale también acepta varias opciones adicionales para personalizar el comportamiento de escalado, cómo especificar un tiempo de espera, forzar el escalado, entre otras.

1. 7 Actualizar el servicio

El comando docker service update se utiliza para actualizar un servicio existente en un clúster de Docker Swarm. Con este comando, se pueden actualizar las configuraciones y las opciones de un servicio existente. Esto permite, por ejemplo, modificar la cantidad de recursos asignados a un servicio, cambiar las variables de entorno, actualizar el contenido de un volumen o cambiar la imagen utilizada para crear el servicio.

Un ejemplo de cambiando la imagen a un servicio de wordpress podría ser el siguiente:

vagrant@manager:~$ docker service update --image wordpress:6.1.1 wordpress
wordpress
overall progress: 4 out of 4 tasks 
1/4: running   [==================================================>] 
2/4: running   [==================================================>] 
3/4: running   [==================================================>] 
4/4: running   [==================================================>] 
verify: Service converged

Donde “wordpress” es el nombre del servicio que se desea actualizar y “wordpress:6.1.1” es la nueva imagen de wordpress que se desea utilizar. Con este comando, se actualizará el servicio “wordpress” a la versión de la imagen que hemos indicado.

Visualizando la actualización de imagen del servicio WordPress

11. Imagen Visualizando la actualización de imagen del servicio WordPress

Es importante mencionar que el servicio se actualizará sin detenerlo o interrumpir su funcionamiento, y se realizará una transición suave a la nueva configuración, es posible especificar opciones adicionales para personalizar el proceso de actualización.

1.8 Etiquetar nodos

Etiquetar nodos es una característica de Docker Swarm que permite asignar etiquetas personalizadas a los nodos del clúster. Estas etiquetas pueden ser utilizadas para identificar o clasificar los nodos según una serie de criterios, como el tipo de hardware, la ubicación física, el uso previsto, entre otros.

Un ejemplo de cómo etiquetar un nodo para asignar una base de datos específica podría ser el siguiente:

docker node update --label-add db=true nodo1

En este ejemplo, se está asignando la etiqueta “db=true” al nodo “nodo1”, lo que indica que este nodo tiene una base de datos instalada y configurada. Luego, se pueden crear servicios que utilicen esta etiqueta para asegurar que se ejecuten solo en ese nodo específico.

docker service create --name mydb --constraint 'node.labels.db==true' --replicas 1 mydatabase

En este caso, el servicio “mydb” solo se ejecutará en el nodo “nodo1”, ya que es el único nodo con la etiqueta “db=true”.

En resumen, etiquetar nodos es una característica útil que permite clasificar y organizar los nodos del clúster de Docker Swarm, lo que facilita la asignación de servicios específicos a los nodos

1.9 Docker secrets

Docker Secrets es una característica de Docker Swarm que permite gestionar y proteger los secrets (como contraseñas, tokens, certificados, entre otros) utilizados por tus servicios en un clúster de Docker. Los secrets son cifrados y almacenados en el sistema de archivos del manager del clúster y se distribuyen de forma segura a los nodos que ejecutan el servicio.

-Puede interesarte este artículo: “Procesos de automatización con n8n“-

Un ejemplo de cómo utilizar Docker Secrets con un servicio de MySQL podría ser el siguiente:

Crear el secreto para la contraseña de la base de datos:

echo "mydbpassword" | docker secret create mysql_root_password -

Crear el servicio de MySQL utilizando el secreto:

docker service create --name mysql --secret mysql_root_password -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_root_password mysql

Este servicio utiliza la variable de entorno MYSQL_ROOT_PASSWORD_FILE para especificar dónde se encuentra el archivo del secret, en este caso en la ruta /run/secrets/mysql_root_password.

En este ejemplo, se crea un secreto llamado “mysql_root_password” que contiene la contraseña de la base de datos y se utiliza al crear el servicio de MySQL. De esta manera, la contraseña estará protegida y no se almacenará en un archivo o variable de entorno inseguro.

En resumen, Docker Secrets es una característica de Docker Swarm que permite gestionar y proteger los secrets utilizados por tus servicios de una manera segura y fácil de usar.

1.10 Eliminar el servicio

Para eliminar un servicio existente en un clúster de Docker Swarm, se puede utilizar el comando docker service rm. Este comando tiene la siguiente sintaxis:

docker service rm [OPTIONS] SERVICE

Dónde SERVICE es el nombre del servicio que se desea eliminar.

Por ejemplo, si quieres eliminar un servicio llamado “portainer”, utilizarías el siguiente comando:

vagrant@manager:~$ docker service rm portainer
portainer

Es importante mencionar que al eliminar el servicio, se detendrán automáticamente todas las réplicas y también se removerán todos los recursos asociados al servicio como configuraciones, redes, volúmenes, entre otros.

Existen opciones adicionales que pueden ser utilizadas con el comando docker service rm para personalizar la forma en que el servicio es eliminado, como especificar un tiempo de espera, forzar la eliminación, entre otros.

En resumen, eliminar un servicio en un clúster de Docker Swarm es sencillo utilizando el comando docker service rm y permite eliminar de forma segura un servicio y sus recursos asociados.

1.11 Uso de Ansible y Docker Swarm

Ansible es una herramienta de automatización de configuración y gestión de sistemas que se puede utilizar para automatizar tareas en un clúster de Docker Swarm. Con Ansible, se pueden crear playbooks (conjunto de tareas) para automatizar tareas como la creación y actualización de servicios, la gestión de nodos y la configuración de redes en un clúster de Docker Swarm.

Para utilizar Ansible y Docker Swarm, se deben seguir los siguientes pasos:

  1. Instalar Ansible en una máquina controladora.
  2. Crear un inventario (archivo de configuración) que contenga la lista de nodos del clúster de Docker Swarm.
  3. Crear playbooks de Ansible que contengan las tareas a automatizar.
  4. Ejecutar los playbooks de Ansible en los nodos del clúster de Docker Swarm.

Ejemplo de playbook de Ansible para desplegar un servicio de WordPress en un clúster de Docker Swarm:

- name: Create WordPress service
  docker_service:
    name: wordpress
    image: wordpress:latest
    state: present
    replicas: 3
    ports:
      - "80:80"
    volumes:
      - "/data/wp:/var/www/html"
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wpuser
      - WORDPRESS_DB_PASSWORD=wppass

En este ejemplo, se utiliza el módulo “docker_service” de Ansible para crear un servicio de WordPress con el nombre “wordpress”, utilizando la imagen “wordpress:latest”, con 3 réplicas, exponiendo el puerto 80, montando el volumen “/data/wp” en “/var/www/html” y estableciendo las variables de entorno necesarias para la conexión con la base de datos.

Una vez ejecutado el playbook, Ansible se encargará de crear y configurar el servicio de WordPress en el clúster de Docker Swarm.

¿Y si ya tenemos el servicio en un archivo externo?

Es posible desplegar un servicio en un clúster de Docker Swarm utilizando Ansible y un archivo de configuración ya creado previamente. Esto se puede hacer utilizando el módulo “docker_service” de Ansible y la opción “config_file” para especificar la ruta del archivo de configuración.

Ejemplo de playbook de Ansible para desplegar un servicio en un clúster de Docker Swarm utilizando un archivo de configuración ya creado:

name: Deploy service
  docker_service:
    config_file: /path/to/service.yml
    state: present

En este ejemplo, se utiliza el módulo “docker_service” de Ansible para desplegar un servicio en el clúster de Docker Swarm utilizando el archivo de configuración “service.yml” ubicado en la ruta “/path/to/service.yml”. La opción “state: present” indica que el servicio debe estar presente en el clúster una vez que se ejecute el playbook, con este parámetro Ansible intentará instalar el paquete si aún no está en el sistema, pero no lo volverá a instalar si ya está presente.

Es importante mencionar que el archivo de configuración debe estar en el formato correcto para ser interpretado por Docker Swarm.

En resumen, Ansible es una herramienta de automatización de configuración y gestión de sistemas que se puede utilizar para automatizar tareas en un clúster de Docker Swarm, permitiendo una gestión más sencilla y automatizada de los servicios y recursos del cluster, en este caso específico de wordpress.

2. Jenkins + Ansible + Docker Swarm

Jenkins es una herramienta de automatización de construcción y despliegue de software que se puede utilizar en conjunto con Ansible y Docker Swarm para automatizar procesos de construcción, pruebas y despliegue en un clúster de Docker Swarm.

Para utilizar Jenkins con Ansible y Docker Swarm, se deben seguir los siguientes pasos:

  1. Configuración del entorno:
    • Instalar Jenkins en un servidor.
    • Instalar Ansible en el mismo servidor o en un servidor diferente.
    • Configurar Jenkins para que pueda acceder a GitLab y Docker Swarm.
  2. Instalar el plugin “Ansible” en Jenkins para poder utilizar Ansible desde Jenkins.
  3. Crear un proyecto en Jenkins para automatizar la construcción y el despliegue de una aplicación en un clúster de Docker Swarm.
  4. Configurar el proyecto para utilizar Ansible para desplegar la aplicación en el clúster de Docker Swarm.
  5. Ejecutar el proyecto en Jenkins para automatizar la construcción, pruebas y despliegue de la aplicación en el clúster de Docker Swarm.

-También te puede interesar”Alta disponibilidad en Nginx mediante Keepalived – IP Virtual“-

Observamos en la siguiente imagen una configuración realizada para un cliente, donde se organizan los diferentes entornos de despliegue de servicios, permitiendo una fácil y cómoda implementación con solo un clic.

Pantalla de Jenkins para seleccionar el entorno que queremos desplegar12. Imagen Pantalla de Jenkins para seleccionar el entorno que queremos desplegar

En resumen, la combinación de Jenkins, Ansible y Docker Swarm es una solución muy potente para la automatización de infraestructuras de TI y la implementación de aplicaciones en entornos de contenedores. Esta combinación permite a los equipos de TI crear infraestructuras altamente escalables y flexibles, reducir errores humanos y mejorar la calidad de las aplicaciones. Sin embargo, estas tecnologías pueden requerir una inversión significativa en capacitación y recursos, lo que debe ser considerado cuidadosamente antes de implementarlas.

3. Conclusión

En conclusión, en esta guía hemos visto como Docker Swarm es una opción sólida para aquellos que buscan una plataforma de orquestación de contenedores fácil de usar pero potente, hemos explorado los pasos necesarios para instalar y configurar Docker Swarm, desde la preparación del entorno hasta la creación de un clúster y la implementación de servicios. Por ello, cualquier persona que siga los pasos descritos en esta guía estará un paso más cerca de aprovechar al máximo Docker Swarm y llevar su infraestructura de contenedores al siguiente nivel.

Si deseas obtener más información y asesoramiento sobre cómo configurar este tipo de sistema en su entorno, no dudes en ponerte en contacto con nosotros. Estaremos encantados de brindarte asistencia y ayudarte en cada paso del proceso de configuración, asegurando una implementación exitosa y un rendimiento óptimo en su sistema.

¿Necesitas ayuda para definir e implementar la estrategia de integración de tu empresa?

¡Habla con nuestros expertos!

Contáctanos para más información sobre Integración