CodeGym /Cursos /Docker SELF /Introducción a Docker Swarm

Introducción a Docker Swarm

Docker SELF
Nivel 18 , Lección 0
Disponible

6.1 Conceptos básicos de Docker Swarm

Docker Swarm — es un sistema de orquestación de contenedores integrado que ofrece Docker. Te permite crear, manejar y escalar un clúster de hosts Docker, convirtiéndolos en un único host lógico en el que se pueden ejecutar contenedores. Swarm distribuye automáticamente las tareas entre los nodos, asegurando comodidad y tolerancia a fallos. En esta lección, veremos los componentes clave y los comandos básicos para manejar Docker Swarm.

Conceptos básicos de Docker Swarm:

  1. Clúster (Swarm): un grupo de hosts Docker unidos en un único clúster lógico.
  2. Managers: nodos que gestionan el clúster y distribuyen tareas entre los nodos de trabajo.
  3. Nodos de trabajo (Workers): nodos que ejecutan tareas y lanzan contenedores.
  4. Servicios (Services): representación lógica de aplicaciones que describe qué tareas realizar y cuántas instancias de contenedores lanzar.
  5. Tareas (Tasks): contenedores individuales que son instancias de servicios.

Arquitectura de Docker Swarm:

Docker Swarm usa una arquitectura basada en managers y nodos de trabajo. Los managers gestionan el estado del clúster, y los nodos de trabajo ejecutan tareas.

Managers:

  • Controlan el estado del clúster y su configuración.
  • Distribuyen tareas entre los nodos de trabajo.
  • Garantizan tolerancia a fallos y alta disponibilidad (si hay múltiples managers).

Nodos de trabajo:

  • Ejecutan tareas asignadas por los managers.
  • Lanzan contenedores según las asignaciones.

Comandos básicos de Docker Swarm:

  1. docker swarm init: inicializar un nuevo clúster Swarm.
  2. docker swarm join: unir un nodo a un clúster existente.
  3. docker node ls: mostrar la lista de nodos en el clúster.
  4. docker service create: crear un nuevo servicio.
  5. docker service ls: mostrar los servicios en ejecución.
  6. docker service scale: escalar el servicio a una cantidad específica de instancias.
  7. docker service rm: eliminar un servicio del clúster.

Usar Docker Swarm facilita la gestión de aplicaciones en sistemas distribuidos, garantizando tolerancia a fallos, escalabilidad y comodidad en el despliegue.

6.2 Creación de un clúster Docker Swarm

Creación y administración de un clúster Docker Swarm

Paso 1: Inicialización del clúster

En el primer host (manager) ejecuta el siguiente comando:

Terminal

docker swarm init --advertise-addr <MANAGER_IP>

Este comando inicializa un nuevo clúster Swarm, convierte el nodo actual en un manager y muestra el comando para añadir nodos workers.

Paso 2: Unión de nodos workers

En otros hosts ejecuta el comando mostrado tras ejecutar docker swarm init, para añadirlos al clúster:

Terminal

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

Dónde:

  • <SWARM_TOKEN>: el token para conectar al clúster (generado por el comando docker swarm init).
  • <MANAGER_IP>: la dirección IP del nodo manager.

Paso 3: Visualización de los nodos

Para ver todos los nodos en el clúster usa el siguiente comando:

Terminal

docker node ls

Este comando mostrará una lista de todos los nodos, incluyendo sus roles, estados y disponibilidad.

Ejemplo de salida del comando docker node ls

Terminal

ID                                    HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
qwertyuiop12345    manager-node        Ready               Active             Leader
asdfghjkl67890      worker-node1       Ready               Active
zxcvbnm09876       worker-node2       Ready               Active

Explicación de las columnas:

  • ID: Identificador único del nodo.
  • HOSTNAME: Nombre del host donde está ejecutándose el nodo.
  • STATUS: Estado actual del nodo (por ejemplo, Ready).
  • AVAILABILITY: Disponibilidad del nodo (por ejemplo, Active).
  • MANAGER STATUS: Indica si el nodo es un manager (por ejemplo, Leader, Reachable) o un nodo worker (vacío).

Ahora el clúster Docker Swarm está configurado, y puedes crear y escalar aplicaciones.

6.3 Gestión de Docker Swarm

Gestión de servicios en Docker Swarm

1. Creación de un servicio

Crea un servicio que se ejecute con una cantidad específica de réplicas:

Terminal

docker service create --name my_web --replicas 3 -p 8080:80 nginx

En este ejemplo, se crea el servicio my_web, el cual ejecuta 3 instancias de Nginx. Los contenedores publican el puerto 80 en el puerto 8080 del host.

2. Visualización de los servicios

Para ver todos los servicios en ejecución en el clúster, usa el comando:

Terminal

docker service ls

Ejemplo del resultado del comando docker service ls

Terminal

ID                     NAME         MODE           REPLICAS     IMAGE
ab12345               my_web       replicated     3/3          nginx:latest

3. Escalado del servicio

Para cambiar la cantidad de instancias (réplicas) del servicio, usa el comando docker service scale:

Terminal

docker service scale my_web=5

Ahora el servicio my_web tendrá 5 instancias.

4. Actualización del servicio

Para actualizar la imagen del servicio a una nueva versión, usa el comando docker service update:

Terminal

docker service update --image nginx:latest my_web

Asegurando alta disponibilidad

Docker Swarm soporta alta disponibilidad mediante:

  1. Distribución de tareas entre los nodos del clúster para la recuperación automática de contenedores en caso de fallos.
  2. Soporte para múltiples managers: Se recomienda un número impar de managers (por ejemplo, 3 o 5) para evitar problemas de quórum.
  3. Uso de réplicas: Configura varias réplicas para cada servicio para aumentar la tolerancia a fallos.

Concepto de quórum

El quórum representa la mayoría de nodos que deben estar de acuerdo con una acción específica (por ejemplo, escritura de datos o elección de un líder) para que sea considerada válida. Por ejemplo, en un clúster de 5 nodos, el quórum será de 3 nodos.

¡Consejo útil! Asegúrate de que los managers estén ubicados en servidores físicos o en la nube diferentes para minimizar el riesgo de fallos simultáneos.

6.4 Ejemplo de configuración de Docker Compose para Docker Swarm

Docker Compose se puede usar con Docker Swarm para simplificar la gestión de aplicaciones multicontenedor.

Ejemplo de archivo docker-compose.yml

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080-8090:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: ejemplo
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

networks:
  my_overlay_network:
    driver: overlay
    

Ejecutar el stack de Docker Compose en Swarm

Para desplegar el stack en Docker Swarm usa el comando:

Terminal

docker stack deploy -c docker-compose.yml mystack

Ver el stack

Consultar los stacks desplegados:

Terminal

docker stack ls

Ver los servicios en el stack

Terminal

docker stack services mystack
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION