GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Aproveche la orquestación de contenedores en este tutorial de Docker Swarm

¿Alguna vez se ha preguntado si es posible orquestar contenedores directamente con Docker en lugar de Kubernetes? Docker Swam podría ser la solución que está buscando, ¡y está en el camino correcto!

En este tutorial, aprenderá a administrar varios contenedores Docker con Docker Swarm.

¡Sigue leyendo y empieza a orquestar!

Requisitos

Este tutorial será una demostración práctica. Si desea seguirnos, asegúrese de tener lo siguiente:

  • Tres instancias EC2 ejecutándose en Ubuntu 20.04.3 LTS.
  • Docker instalado en todas las instancias de EC2:este tutorial utiliza la versión 20.10.12.

Crear e implementar contenedores en un enjambre Docker

Docker Swarm es un clúster de máquinas físicas o virtuales que ejecuta aplicaciones Docker. El modo Swarm brinda a Docker capacidades integradas de orquestación de contenedores.

Pero antes de que pueda comenzar a administrar varios contenedores, necesitará diferentes sistemas/máquinas (instancias de AWS EC2).

Puede aprender los conceptos clave en el modo de enjambre antes de continuar con el tutorial.

Suponiendo que tenga sus instancias EC2 configuradas:

1. Abra su navegador web e inicie sesión en su panel de EC2. Vea una de las páginas de resumen de información de sus instancias EC2 y anote la dirección IPv4 pública, como se muestra a continuación.

2. A continuación, abra su terminal y ejecute el siguiente comando para crear un nodo administrador en una de sus instancias EC2. Asegúrese de reemplazar 18.237.102.75 con la dirección IPv4 pública de su instancia EC2 que anotó anteriormente (paso uno). El siguiente comando inicializa la instancia como el nodo del administrador de enjambres de Docker.

Un nodo administrador asigna direcciones IP a tareas/contenedores, asigna tareas a nodos, emite comandos para que se ejecuten los nodos trabajadores.

El nodo administrador realiza las funciones de administración de clústeres y orquestación de Docker Swarm. Pero no te preocupes. Aprenderá sobre los nodos trabajadores a medida que avance en este tutorial.

sudo docker swarm init --advertise-addr 18.237.102.75

Tenga en cuenta el comando similar que se muestra a continuación.

3. Ejecute el comando que anotó anteriormente (paso dos) para unirse al enjambre como un nodo trabajador. Un nodo trabajador recibe y ejecuta tareas instruidas por los nodos administradores.

4. Ahora ejecute el docker node Comando a continuación para verificar todos los nodos presentes en un enjambre en particular. Tenga en cuenta que solo el nodo administrador puede ejecutar el siguiente comando.

sudo docker node ls

5. Repita el paso dos para crear un nodo administrador en otra instancia EC2.

Si ya no tiene su token de unión, puede ejecutar el siguiente comando en el nodo del administrador y mostrar el token de unión.

sudo docker swarm join-token worker

6. A continuación, ejecute el siguiente docker service comando para crear el servicio administrado en Docker Swarm. Implementará una imagen NGINX simple en este tutorial.

El docker service El siguiente comando realiza lo siguiente:

  • Cree un servicio llamado (--name ) nginx-service , pero cualquier nombre funcionará.
  • Indique el número de --replicas de su aplicación/contenedor que desee. En este caso, el valor de réplicas se establece en tres (3 ). Las réplicas brindan una alta disponibilidad de su aplicación, lo que elimina el tiempo de inactividad. Docker comparte las réplicas entre los tres nodos disponibles al crear réplicas para el servicio.
  • Indique el puerto (-p 80:80 ), luego indique el nombre de la imagen a usar (nginx:latest ).
sudo docker service create --name nginx-service --replicas 3 -p 80:80 nginx:latest

7. Ejecute el siguiente comando para confirmar el servicio (servicio nginx) que creó anteriormente (paso seis).

sudo docker service ls

8. Ahora cambie a cada nodo y ejecute el siguiente comando para enumerar los contenedores disponibles.

sudo docker ps

Verá una réplica del contenedor que creó para cada nodo, como se muestra a continuación.

9. Finalmente, obtenga las direcciones IP para cada una de las instancias EC2 y navegue hasta ellas en su navegador web preferido.

De manera similar, a continuación, puede verificar que cada instancia tiene una réplica de su aplicación.

Implementar y escalar una aplicación con múltiples servicios

Ha pasado por la implementación de un solo servicio, pero ¿cómo implementaría una aplicación con múltiples servicios? Docker Swarm también puede hacer el trabajo. Usarás el stack deploy comando, que utiliza las instrucciones establecidas en un archivo YAML que creará.

1. Abra el nodo del administrador y cree un archivo YAML en su editor de texto preferido. Puede nombrar el archivo de otra manera, pero para esta demostración, el archivo se llama file-name.yml .

Rellene el nombre-archivo.yml archivo con el siguiente código, que crea dos servicios utilizando imágenes NGINX y Ubuntu.

version: '3.3' # version of compose file
services:
  service1:
    image: 'nginx:latest' # latest version of NGINX image on Docker hub
    ports:
      - '8000:8080'
  service2:
    image: 'ubuntu' # Ubuntu image on docker hub

2. A continuación, ejecute la docker stack Comando a continuación para deploy los servicios creados por file-name.yml archivo a Docker Swarm. La new-stack El parámetro es arbitrario, lo que nombra la pila que crea el comando para los servicios.

sudo docker stack deploy -c file-name.yml new-stack

3. Ejecute el siguiente comando para enumerar los servicios disponibles y anote el nombre del servicio que desea.

sudo docker service ls

4. Ahora, ejecute el siguiente comando para crear réplicas para su pila. Cuatro (4 ) réplicas para ser exactos para esta demostración. El nodo administrador asignará qué nodos contendrán las réplicas.

La aplicación que implementó anteriormente en Docker Swarm (paso dos) solo tiene una réplica manejada por el nodo administrador. Para escalar un servicio, crea cuatro réplicas de ese servicio. Dado que solo tiene tres nodos, un nodo manejará dos réplicas, mientras que el resto de los nodos manejará una cada uno.

También puede reducir la escala de un servicio reduciendo el número de réplicas.

sudo docker service scale new-stack_service1=4

5. Finalmente, ejecute el siguiente comando de servicio docker para ver todos los contenedores que actualmente manejan las réplicas del new-stack_service1 Servicio.

sudo docker service ps new-stack_service1

En la imagen a continuación, observe que un nodo maneja dos réplicas.

Servicio de actualización en Swarm

Anteriormente aprendió cómo implementar servicios, pero ¿sabe que es posible actualizar los servicios? Tal vez desee probar una versión anterior de un servicio. Si es así, utilizará la update etiqueta y --image marca para indicar la versión del servicio que desea, luego indique el nombre del servicio para actualizar.

1. Ejecute el siguiente comando para inspeccionar los detalles del servicio que se está ejecutando actualmente.

sudo docker service inspect --pretty nginx-service

A continuación, puede ver que NGINX se está ejecutando en la última versión.

2. Ahora, ejecute el siguiente comando si prefiere cambiar/actualizar a una versión diferente de NGINX en el servicio actualmente en ejecución (nginx-service ) para las pruebas. Asegúrese de reemplazar nginx:1.20 con tu versión preferida.

sudo docker service update --image nginx:1.20 nginx-service

3. Por último, vuelva a ejecutar el siguiente comando como lo hizo anteriormente (paso uno) para inspeccionar los detalles del servicio en ejecución.

sudo docker service inspect --pretty nginx-service

Observe a continuación que el servicio en ejecución se actualizó correctamente.

Actualización de disponibilidad de nodos

Es posible que desee trabajar en un nodo de trabajo en particular para, quizás, realizar algunos cambios en el contenedor, pero desea que su aplicación esté activa. ¿Cómo? Mientras trabaja en ese nodo, drain ese nodo, por lo que no recibe ninguna tarea del nodo administrador.

Junto al drain comando, debe agregar la update etiqueta y --availability marca para alterar la disponibilidad de un nodo en particular.

1. Ejecute el docker node Comando a continuación para enumerar los nodos disponibles y anotar la ID de su nodo de destino.

sudo docker node ls

2. A continuación, ejecute el siguiente comando para cambiar --availability del nodo drenando (drain ). Reemplace kseh5660n8xb3i2ojidzx0x13 con el ID de su nodo de destino que anotó en el paso uno.

sudo docker node update --availability drain kseh5660n8xb3i2ojidzx0x13

3. Finalmente, vuelva a ejecutar docker comando a continuación como lo hizo en el paso uno para enumerar los nodos disponibles. sudo docker node ls

sudo docker node ls

A continuación, puede ver que la disponibilidad del nodo seleccionado ha cambiado (Drenaje ), para que el nodo no participe en las actividades que se llevan a cabo en el enjambre.

Conclusión

En este tutorial, ha aprendido a aprovechar la orquestación de contenedores con Docker Swarm. Obtuvo conocimientos fundamentales sobre cómo escalar una aplicación con múltiples servicios y realizar operaciones al trabajar con Docker Swarm.

En este punto, ya sabe cómo administrar su contenedor y servicios Docker en Docker Swarm. Entonces, ¿cómo planea incorporar este nuevo conocimiento en sus futuras orquestaciones de contenedores? ¿Quizás comenzar a implementar aplicaciones Django con Docker Swarm?


Docker
  1. Algunos comandos DOCKER

  2. Una introducción a Docker

  3. Cómo usar SSH en un contenedor Docker

  4. Cómo asignar una IP estática a un contenedor Docker

  5. Cómo instalar Vim en un contenedor Docker

Utilice Docker con esta solución de tutorial de pila MERN

Tutorial de introducción a Azure Docker

Cómo configurar un contenedor Apache Docker

Cómo ejecutar contenedores Docker

Qué hacer si un contenedor Docker sale inmediatamente

Cree un simple contenedor Docker Hello World de Node.js desde cero