Cómo configurar Docker Swarm

DockerBeginner
Practicar Ahora

Introducción

Docker Swarm es una potente solución de gestión y orquestación de clústeres que te permite desplegar y gestionar contenedores Docker a gran escala. En este tutorial, aprenderás a configurar un Docker Swarm, gestionar y escalar tus servicios Swarm, y aprovechar al máximo las capacidades de orquestación de contenedores de Docker.

Entendiendo Docker Swarm

¿Qué es Docker Swarm?

Docker Swarm es una herramienta nativa de agrupación y orquestación para contenedores Docker. Permite gestionar un grupo de motores Docker, llamado enjambre (swarm), y desplegar servicios en él. En un Docker Swarm, los motores Docker trabajan juntos como un único host Docker virtual.

Conceptos Clave en Docker Swarm

  1. Nodos: Los nodos son los motores Docker individuales que participan en el enjambre. Hay dos tipos de nodos: administradores y trabajadores.

    • Administradores: Los administradores son responsables de gestionar el enjambre, incluyendo la programación de tareas, el mantenimiento del estado deseado del enjambre y la provisión de un punto de entrada para el enjambre.
    • Trabajadores: Los trabajadores son responsables de ejecutar los contenedores reales en el enjambre.
  2. Servicios: Los servicios definen el estado deseado de tu aplicación. Un servicio puede ser un solo contenedor o un grupo de contenedores que trabajan juntos.

  3. Tareas: Las tareas son las unidades atómicas de programación en un enjambre. Cada servicio se divide en tareas, que luego se programan para ejecutarse en los nodos disponibles.

  4. Balanceo de carga: Docker Swarm proporciona balanceo de carga incorporado para los servicios. Los nodos administradores distribuyen automáticamente las tareas entre los nodos trabajadores, garantizando alta disponibilidad y escalabilidad.

Ventajas de Docker Swarm

  1. Orquestación Nativa: Docker Swarm es una herramienta de orquestación nativa, lo que significa que está integrada en el motor Docker y no requiere ningún software adicional.

  2. Simplicidad: Docker Swarm es relativamente sencillo de configurar y gestionar, lo que lo convierte en una buena opción para despliegues de pequeño a mediano tamaño.

  3. Alta Disponibilidad: Docker Swarm proporciona características de alta disponibilidad incorporadas, como la programación automática de tareas y el balanceo de carga.

  4. Escalabilidad: Docker Swarm puede escalar fácilmente el número de nodos y contenedores según sea necesario.

  5. Seguridad: Docker Swarm utiliza las mismas características de seguridad que el motor Docker, incluyendo control de acceso basado en roles y comunicación encriptada.

Ahora que tienes una comprensión básica de Docker Swarm, pasemos a la siguiente sección: Inicializando un Docker Swarm.

Inicializando un Docker Swarm

Preparando los Nodos

Antes de poder inicializar un Docker Swarm, necesitas tener un conjunto de hosts Docker (nodos) listos. Puedes usar máquinas físicas o virtuales, siempre que estén ejecutando la misma versión de Docker.

Inicializando el Swarm

Para inicializar el Docker Swarm, necesitarás designar uno de los nodos como administrador. Puedes hacerlo ejecutando el siguiente comando en el nodo deseado:

docker swarm init --advertise-addr <MANAGER-IP>

Reemplaza <MANAGER-IP> con la dirección IP del nodo administrador.

Después de ejecutar este comando, recibirás un token que puedes usar para unir otros nodos al swarm como trabajadores. Puedes unir un nodo como trabajador ejecutando el siguiente comando en el nodo deseado:

docker swarm join --token <TOKEN> <MANAGER-IP>:2377

Reemplaza <TOKEN> con el token que recibiste del comando docker swarm init, y <MANAGER-IP> con la dirección IP del nodo administrador.

Verificando el Swarm

Puedes verificar el estado del swarm ejecutando el siguiente comando en el nodo administrador:

docker node ls

Esto mostrará una lista de todos los nodos en el swarm, junto con sus roles (administrador o trabajador) y estado.

Asegurando el Swarm

De forma predeterminada, la comunicación entre los nodos del swarm está encriptada usando el protocolo Raft. Sin embargo, puedes asegurar aún más tu swarm habilitando la autenticación mutua Transport Layer Security (mTLS).

Para habilitar mTLS, necesitarás generar y distribuir los certificados necesarios. Puedes hacerlo usando el comando docker swarm ca en el nodo administrador.

docker swarm ca --rotate

Este comando generará nuevos certificados raíz e intermedios y los distribuirá a todos los nodos del swarm.

Ahora que has inicializado tu Docker Swarm, pasemos a la siguiente sección: Administración y Escalado de Servicios Swarm.

Administración y Escalado de Servicios Swarm

Desplegando un Servicio

Para desplegar un servicio en Docker Swarm, puedes usar el comando docker service create. Por ejemplo, para desplegar un servidor web Nginx, puedes ejecutar el siguiente comando:

docker service create --name nginx -p 80:80 nginx:latest

Esto creará un nuevo servicio llamado "nginx" y lo desplegará en el swarm. El servicio expondrá el puerto 80 en el host y lo redireccionará al puerto 80 en el contenedor.

Escalando un Servicio

Puedes escalar el número de réplicas (tareas) de un servicio usando el comando docker service scale. Por ejemplo, para escalar el servicio "nginx" a 5 réplicas, puedes ejecutar:

docker service scale nginx=5

Esto creará 4 tareas adicionales para el servicio "nginx", y el nodo administrador las programará automáticamente en los nodos trabajadores disponibles.

Actualizando un Servicio

Puedes actualizar la configuración de un servicio usando el comando docker service update. Por ejemplo, para actualizar el servicio "nginx" para usar una versión de imagen diferente, puedes ejecutar:

docker service update --image nginx:1.19 nginx

Esto actualizará el servicio "nginx" para usar la imagen "nginx:1.19".

Monitorizando Servicios Swarm

Puedes monitorear el estado de tus servicios swarm usando los comandos docker service ls y docker service ps. El comando docker service ls te mostrará una lista de todos los servicios que se ejecutan en el swarm, mientras que el comando docker service ps te mostrará el estado de cada tarea dentro de un servicio.

## Listar todos los servicios
docker service ls

## Listar tareas para un servicio específico
docker service ps nginx

Drenando Nodos

Si necesitas realizar mantenimiento en un nodo, puedes "drenar" el nodo, lo que hará que el administrador reprograme cualquier tarea que se esté ejecutando en ese nodo a otros nodos disponibles. Puedes hacerlo usando el comando docker node update:

docker node update --availability drain <NODE-ID>

Reemplaza <NODE-ID> con el ID del nodo que deseas drenar.

Esto cubre los fundamentos de la administración y el escalado de servicios Docker Swarm. Con este conocimiento, deberías poder desplegar, escalar y mantener tus aplicaciones que se ejecutan en un Docker Swarm.

Resumen

Al finalizar este tutorial, tendrás una comprensión sólida de Docker Swarm y cómo configurarlo, administrar tus servicios Swarm y escalar tus aplicaciones contenedorizadas con facilidad. Aprovecha el poder de Docker Swarm para optimizar tus procesos de despliegue y administración de contenedores, asegurando que tus aplicaciones sean altamente disponibles y escalables.