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
:
- Clúster (Swarm): un grupo de hosts Docker unidos en un único clúster lógico.
- Managers: nodos que gestionan el clúster y distribuyen tareas entre los nodos de trabajo.
- Nodos de trabajo (Workers): nodos que ejecutan tareas y lanzan contenedores.
- Servicios (Services): representación lógica de aplicaciones que describe qué tareas realizar y cuántas instancias de contenedores lanzar.
- 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
:
-
docker swarm init
: inicializar un nuevo clúster Swarm. -
docker swarm join
: unir un nodo a un clúster existente. -
docker node ls
: mostrar la lista de nodos en el clúster. -
docker service create
: crear un nuevo servicio. -
docker service ls
: mostrar los servicios en ejecución. -
docker service scale
: escalar el servicio a una cantidad específica de instancias. -
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:
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:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Dónde:
<SWARM_TOKEN>
: el token para conectar al clúster (generado por el comandodocker 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:
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
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:
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:
docker service ls
Ejemplo del resultado del comando docker service ls
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
:
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
:
docker service update --image nginx:latest my_web
Asegurando alta disponibilidad
Docker Swarm soporta alta disponibilidad mediante:
- Distribución de tareas entre los nodos del clúster para la recuperación automática de contenedores en caso de fallos.
- Soporte para múltiples managers: Se recomienda un número impar de managers (por ejemplo, 3 o 5) para evitar problemas de quórum.
- 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
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:
docker stack deploy -c docker-compose.yml mystack
Ver el stack
Consultar los stacks desplegados:
docker stack ls
Ver los servicios en el stack
docker stack services mystack
GO TO FULL VERSION