Cómo usar el comando docker service update para modificar un servicio

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 administrar y modificar eficazmente los servicios de Docker utilizando el comando docker service update. Comenzará creando un servicio simple y luego explorará cómo escalarlo actualizando el número de réplicas.

Además, aprenderá cómo realizar un reinicio gradual de su servicio, agregar o eliminar puertos publicados y entender cómo revertir su servicio a una versión anterior, lo que le proporcionará las habilidades esenciales para administrar el ciclo de vida de sus aplicaciones contenerizadas en un entorno de Docker Swarm.


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/restart("Restart Container") 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-555232{{"Cómo usar el comando docker service update para modificar un servicio"}} docker/ps -.-> lab-555232{{"Cómo usar el comando docker service update para modificar un servicio"}} docker/restart -.-> lab-555232{{"Cómo usar el comando docker service update para modificar un servicio"}} docker/inspect -.-> lab-555232{{"Cómo usar el comando docker service update para modificar un servicio"}} docker/create -.-> lab-555232{{"Cómo usar el comando docker service update para modificar un servicio"}} docker/pull -.-> lab-555232{{"Cómo usar el comando docker service update para modificar un servicio"}} end

Crear un servicio simple

En este paso, aprenderá cómo crear un servicio simple de Docker. Un servicio es un grupo de contenedores de la misma imagen. Los servicios son útiles para escalar su aplicación y garantizar una alta disponibilidad.

Primero, vamos a descargar la imagen alpine de Docker Hub. Esta imagen es muy pequeña y útil para pruebas.

docker pull alpine

Debería ver una salida que indique que la imagen se está descargando.

Ahora, vamos a crear un servicio llamado my-service utilizando la imagen alpine. Ejecutaremos un comando simple dentro del contenedor que imprima "Hello, LabEx!" y luego salga.

docker service create --name my-service alpine echo "Hello, LabEx!"

Este comando crea un nuevo servicio. La opción --name my-service le da un nombre al servicio. alpine es la imagen a utilizar, y echo "Hello, LabEx!" es el comando a ejecutar dentro del contenedor.

Debería ver una salida similar a esta, que indica el ID del servicio:

<service_id>

Para verificar que el servicio se haya creado correctamente, puede listar los servicios:

docker service ls

Debería ver my-service en la salida.

Actualizar las réplicas de un servicio

En este paso, aprenderá cómo escalar un servicio de Docker actualizando el número de réplicas. Las réplicas son copias idénticas de los contenedores de su servicio. Aumentar el número de réplicas permite que su servicio maneje una mayor carga y brinde una mayor disponibilidad.

Actualmente, nuestro servicio my-service tiene solo una réplica. Puede ver esto en la salida de docker service ls en la columna "REPLICAS".

Vamos a escalar el servicio a 3 réplicas. Podemos hacer esto utilizando el comando docker service update con la opción --replicas.

docker service update --replicas 3 my-service

Este comando le dice a Docker Swarm que actualice el servicio my-service para que tenga 3 réplicas. Docker Swarm creará automáticamente los contenedores adicionales necesarios para alcanzar el número deseado de réplicas.

Debería ver una salida que indique que el servicio se ha actualizado.

Para verificar que el servicio se haya escalado, liste los servicios nuevamente:

docker service ls

Mire la columna "REPLICAS" para my-service. Ahora debería mostrar 3/3, lo que indica que se desean 3 réplicas y que actualmente se están ejecutando 3.

También puede inspeccionar las tareas asociadas con el servicio para ver los contenedores individuales:

docker service ps my-service

Este comando le mostrará el estado de cada réplica (tarea) del servicio. Debería ver tres tareas listadas, probablemente con un estado de "Running".

Realizar un reinicio gradual del servicio

En este paso, aprenderá cómo realizar un reinicio gradual de un servicio de Docker. Un reinicio gradual actualiza las tareas del servicio una por una, asegurando que el servicio permanezca disponible durante el proceso de actualización. Esto es crucial para mantener el tiempo de actividad de la aplicación.

Para iniciar un reinicio gradual, podemos utilizar el comando docker service update con la opción --force. Esta opción fuerza una nueva actualización incluso si la configuración del servicio no ha cambiado.

docker service update --force my-service

Este comando iniciará un reinicio gradual del servicio my-service. Docker Swarm detendrá e iniciará secuencialmente cada réplica del servicio.

Debería ver una salida que indique que el servicio se ha actualizado.

Para observar el reinicio gradual en progreso, puede monitorear continuamente las tareas del servicio:

docker service ps my-service

Ejecute este comando varias veces. Verá que el "CURRENT STATE" de las tareas cambia de "Running" a "Shutdown" y luego vuelve a "Running" a medida que se reinicia cada réplica. Este proceso se produce una réplica a la vez, lo que demuestra la naturaleza gradual del reinicio.

Una vez que se hayan reiniciado todas las tareas, la salida de docker service ps my-service mostrará todas las tareas en estado "Running" con marcas de tiempo actualizadas en la columna "UPDATED".

Agregar o eliminar un puerto publicado

En este paso, aprenderá cómo agregar o eliminar un puerto publicado para un servicio de Docker. Publicar un puerto hace que un puerto dentro del contenedor sea accesible desde fuera del clúster de Docker Swarm. Esto es esencial para exponer su aplicación a usuarios u otros servicios.

Nuestro servicio actual my-service no tiene ningún puerto publicado porque simplemente ejecuta un simple comando echo y finaliza. Para demostrar cómo publicar puertos, creemos un nuevo servicio que ejecute un simple servidor web. Utilizaremos la imagen nginx para esto.

Primero, descargue la imagen nginx:

docker pull nginx

Ahora, creemos un nuevo servicio llamado web-service y publiquemos el puerto 80 del contenedor al puerto 8080 en el host.

docker service create --name web-service --publish 8080:80 nginx

Este comando crea un servicio llamado web-service utilizando la imagen nginx. La opción --publish 8080:80 mapea el puerto 80 dentro del contenedor al puerto 8080 en el host.

Debería ver una salida que indique el ID del servicio.

Para verificar que el puerto está publicado, puede inspeccionar el servicio:

docker service inspect web-service

Busque la sección EndpointSpec en la salida. Debería ver una entrada bajo Ports que muestre el mapeo del puerto publicado (por ejemplo, PublishedPort: 8080, TargetPort: 80).

Ahora, eliminemos el puerto publicado del servicio web-service. Podemos hacer esto utilizando el comando docker service update con la opción --publish-rm, especificando el puerto objetivo dentro del contenedor.

docker service update --publish-rm 80 web-service

Este comando elimina el mapeo del puerto 80 dentro del contenedor.

Debería ver una salida que indique que el servicio se ha actualizado.

Para verificar que el puerto se ha eliminado, inspeccione el servicio nuevamente:

docker service inspect web-service

La sección EndpointSpec ya no debería mostrar el mapeo de puerto que acaba de eliminar.

Revertir el servicio a una versión anterior

En este paso, aprenderá cómo revertir un servicio de Docker a una versión anterior. Revertir es esencial cuando una nueva actualización del servicio introduce problemas. Docker Swarm lleva un registro de las configuraciones anteriores del servicio, lo que le permite revertir rápidamente a un estado estable.

Primero, simulemos una actualización de la que podríamos querer revertir. Actualizaremos el servicio web-service para que use una versión hipotética diferente de la imagen (aunque en realidad no la descargaremos, lo importante para la reversión es la estructura del comando).

docker service update --image nginx:1.20.0 web-service

Este comando intenta actualizar el servicio web-service para que use la imagen nginx:1.20.0. En un escenario real, esta podría ser una nueva versión con un error.

Ahora, supongamos que descubrimos un problema con esta actualización y queremos revertir a la versión anterior (que estaba usando la imagen nginx por defecto). Podemos usar el comando docker service rollback.

docker service rollback web-service

Este comando le dice a Docker Swarm que revierta el servicio web-service a su configuración anterior. Docker Swarm detendrá las tareas que ejecutan la nueva imagen y comenzará tareas que usen la versión anterior de la imagen.

Debería ver una salida que indique que el servicio se está revertido.

Para verificar que la reversión fue exitosa, puede inspeccionar el servicio nuevamente:

docker service inspect web-service

Mire el campo Image en la salida. Ahora debería mostrar la imagen nginx original (sin la etiqueta :1.20.0, suponiendo que descargó la última imagen por defecto inicialmente).

También puede verificar las tareas del servicio para ver los contenedores que ejecutan la imagen anterior:

docker service ps web-service

Las tareas ahora deberían estar ejecutando la imagen original.

Resumen

En este laboratorio, aprendiste cómo gestionar servicios de Docker utilizando el comando docker service update. Comenzaste creando un servicio simple utilizando la imagen alpine y un comando básico echo.

Posteriormente, exploraste las operaciones clave de actualización de servicios. Escalaste el servicio modificando el número de réplicas, realizaste un reinicio gradual para actualizar las tareas del servicio sin tiempo de inactividad y aprendiste cómo agregar o eliminar puertos publicados para exponer el servicio externamente. Finalmente, practicaste la reversión del servicio a una versión anterior, demostrando cómo revertir cambios si una actualización causa problemas. Estos pasos brindaron experiencia práctica en la gestión del ciclo de vida y la configuración de servicios de Docker.