Cómo usar el comando docker service rollback para revertir actualizaciones de servicios

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo gestionar de manera efectiva las actualizaciones de servicios en un entorno Docker Swarm. Comenzaremos creando un servicio Docker Swarm, que sirve como base para desplegar y escalar aplicaciones contenerizadas.

Después de crear el servicio, realizará una actualización a la configuración del servicio, simulando un escenario de despliegue típico. El núcleo de este laboratorio es demostrar cómo utilizar el comando docker service rollback para revertir el servicio a su versión anterior y estable. Finalmente, verificará la configuración del servicio después de la reversión para confirmar la restauración exitosa.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ls -.-> lab-555230{{"Cómo usar el comando docker service rollback para revertir actualizaciones de servicios"}} docker/ps -.-> lab-555230{{"Cómo usar el comando docker service rollback para revertir actualizaciones de servicios"}} docker/inspect -.-> lab-555230{{"Cómo usar el comando docker service rollback para revertir actualizaciones de servicios"}} docker/create -.-> lab-555230{{"Cómo usar el comando docker service rollback para revertir actualizaciones de servicios"}} docker/pull -.-> lab-555230{{"Cómo usar el comando docker service rollback para revertir actualizaciones de servicios"}} end

Crear un servicio Docker Swarm

En este paso, aprenderemos cómo crear un servicio Docker Swarm. Un servicio Docker Swarm es un conjunto de tareas que se ejecutan en un clúster Swarm. Cada tarea es una instancia de un contenedor. Los servicios son el concepto central de Docker Swarm, lo que te permite definir cuántas réplicas de una imagen de contenedor deben estar en ejecución y cómo deben actualizarse.

Antes de crear un servicio, necesitamos inicializar un Docker Swarm. Dado que estamos ejecutando en una sola máquina virtual (VM), inicializaremos un Swarm de un solo nodo.

Primero, inicialicemos el Swarm:

docker swarm init --advertise-addr 127.0.0.1

Deberías ver una salida que indique que el Swarm se ha inicializado y que el nodo actual es ahora un administrador.

Ahora, creemos un servicio utilizando la imagen nginx. Nombraremos el servicio my-nginx y especificaremos que queremos 3 réplicas del contenedor nginx en ejecución.

Primero, descarguemos la imagen nginx para asegurarnos de que esté disponible localmente:

docker pull nginx:latest

Ahora, creemos el servicio:

docker service create --name my-nginx --replicas 3 nginx:latest

Este comando crea un nuevo servicio llamado my-nginx con 3 réplicas utilizando la imagen nginx:latest. Docker Swarm distribuirá automáticamente estas réplicas entre los nodos del Swarm (en este caso, solo nuestro nodo único).

Para verificar que el servicio se ha creado y que las réplicas están en ejecución, puedes listar los servicios:

docker service ls

Deberías ver my-nginx en la lista con 3/3 réplicas en ejecución.

También puedes inspeccionar las tareas asociadas con el servicio:

docker service ps my-nginx

Este comando te mostrará las tareas individuales (contenedores) que componen el servicio my-nginx, su estado actual y el nodo en el que se están ejecutando. Deberías ver 3 tareas en estado Running.

Actualizar el servicio a una nueva configuración

En este paso, actualizaremos el servicio my-nginx para utilizar una versión diferente de la imagen nginx. Esto demuestra cómo realizar una actualización gradual (rolling update) de un servicio en Docker Swarm.

Primero, descarguemos la imagen nginx:1.21. Esta es una versión específica de Nginx a la que actualizaremos nuestro servicio.

docker pull nginx:1.21

Ahora, actualizaremos el servicio my-nginx para utilizar la imagen nginx:1.21. También cambiaremos el número de réplicas a 5.

docker service update --image nginx:1.21 --replicas 5 my-nginx

Este comando le dice a Docker Swarm que actualice el servicio my-nginx. La opción --image nginx:1.21 especifica la nueva imagen a utilizar, y la opción --replicas 5 cambia el número deseado de réplicas a 5. Docker Swarm realizará una actualización gradual, reemplazando los contenedores antiguos con nuevos que ejecuten la imagen especificada y ajustando el número de réplicas.

Puedes monitorear el progreso de la actualización listando las tareas del servicio:

docker service ps my-nginx

Verás que se crean nuevas tareas con la imagen nginx:1.21 y que se apagan las tareas antiguas. Finalmente, deberías ver 5 tareas en estado Running, todas utilizando la imagen nginx:1.21.

También puedes verificar los detalles del servicio para confirmar la actualización:

docker service inspect my-nginx --pretty

Busca los campos Image y Replicas en la salida para confirmar que se han actualizado a nginx:1.21 y 5 respectivamente.

Revertir el servicio a la versión anterior

En este paso, revertiremos el servicio my-nginx a su configuración anterior. Docker Swarm lleva un registro de las configuraciones anteriores de los servicios, lo que te permite revertir fácilmente a un estado conocido y funcional si una actualización introduce problemas.

Para revertir el servicio, utilizamos el comando docker service update con la opción --rollback.

docker service update --rollback my-nginx

Este comando instruye a Docker Swarm a revertir el servicio my-nginx a la configuración que tenía antes de la última actualización. En nuestro caso, esto significa volver a la imagen nginx:latest y al número original de réplicas (que era 3).

Puedes monitorear el proceso de reversión listando las tareas del servicio:

docker service ps my-nginx

Verás que las tareas que ejecutan la imagen nginx:1.21 se apagan y se crean nuevas tareas que ejecutan la imagen nginx:latest. El número de tareas también se ajustará de nuevo al recuento de réplicas anterior.

Una vez que la reversión se complete, deberías ver tareas ejecutando la imagen nginx:latest y el número de réplicas debería volver a ser 3.

También puedes inspeccionar los detalles del servicio para confirmar la reversión:

docker service inspect my-nginx --pretty

Busca los campos Image y Replicas en la salida. Ahora deberían reflejar la configuración antes de la última actualización.

Verificar la configuración del servicio después de la reversión

En este paso, verificaremos explícitamente que el servicio my-nginx se ha revertido con éxito a su configuración anterior. Esto implica comprobar tanto la imagen que está utilizando el servicio como el número de réplicas.

Primero, listemos los servicios para ver el estado actual:

docker service ls

Deberías ver my-nginx en la lista, y la columna REPLICAS debería mostrar 3/3. Esto indica que se desean 3 réplicas y actualmente se están ejecutando 3.

A continuación, inspeccionemos los detalles del servicio para confirmar la imagen y el recuento de réplicas.

docker service inspect my-nginx --pretty

En la salida, busca el campo Image. Ahora debería ser nginx:latest. También, busca el campo Replicas, que debería ser 3.

Finalmente, echemos un vistazo a las tareas asociadas con el servicio para confirmar que los contenedores en ejecución están utilizando la imagen correcta.

docker service ps my-nginx

Deberías ver 3 tareas en la lista, y la columna IMAGE de cada tarea debería ser nginx:latest. El CURRENT STATE de todas las tareas debería ser Running.

Al realizar estas comprobaciones, podemos estar seguros de que la reversión fue exitosa y que el servicio se está ejecutando en su estado anterior deseado.

Resumen

En este laboratorio, aprendimos cómo gestionar servicios de Docker Swarm, centrándonos específicamente en su creación y actualización. Comenzamos inicializando un clúster (Swarm) de Docker de un solo nodo y luego creamos un servicio llamado my-nginx con tres réplicas utilizando la imagen nginx:latest. Verificamos la creación del servicio y las tareas en ejecución utilizando docker service ls y docker service ps.

Después de la creación del servicio, exploramos cómo actualizar la configuración del servicio. Esto implicó cambiar la imagen utilizada por el servicio, demostrando un escenario común para las actualizaciones de servicios en un entorno Swarm.