Cómo usar el comando docker service ps para listar las tareas de 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ás cómo utilizar de manera efectiva el comando docker service ps para inspeccionar y gestionar las tareas dentro de un servicio de Docker Swarm. Comenzarás listando la información básica de las tareas asociadas a un servicio, comprendiendo los detalles clave proporcionados en la salida predeterminada.

A partir de la lista básica, luego explorarás cómo recuperar los detalles completos de las tareas del servicio utilizando la opción --no-trunc para obtener información exhaustiva. El laboratorio te guiará además en cómo filtrar las tareas en función de varios criterios, como el nombre, el nodo en el que se están ejecutando y su estado deseado, lo que te permitirá identificar tareas específicas. Finalmente, aprenderás cómo formatear la salida del comando docker service ps para personalizar la información mostrada según tus necesidades.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") subgraph Lab Skills docker/ps -.-> lab-555228{{"Cómo usar el comando docker service ps para listar las tareas de un servicio"}} docker/rm -.-> lab-555228{{"Cómo usar el comando docker service ps para listar las tareas de un servicio"}} docker/create -.-> lab-555228{{"Cómo usar el comando docker service ps para listar las tareas de un servicio"}} end

Listar tareas de un servicio

En este paso, aprenderás cómo listar las tareas asociadas a un servicio específico en un Docker Swarm. Las tareas son las unidades fundamentales de programación en Swarm y representan una instancia en ejecución de un servicio.

Primero, asegúrate de tener un servicio en ejecución. Crearemos un servicio simple utilizando la imagen nginx.

docker service create --name my-nginx nginx

Este comando crea un servicio llamado my-nginx utilizando la imagen nginx. Docker Swarm creará y gestionará automáticamente las tareas para este servicio.

Ahora, para listar las tareas del servicio my-nginx, puedes utilizar el comando docker service ps seguido del nombre del servicio.

docker service ps my-nginx

Deberías ver una salida similar a esta, que muestra las tareas asociadas a tu servicio:

ID             NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
<task_id>      my-nginx.1   nginx:latest   <node_name>   Running         Running 5 seconds ago

La salida proporciona información sobre cada tarea, incluyendo su ID, nombre, la imagen que está utilizando, el nodo en el que se está ejecutando, su estado deseado y su estado actual.

Listar tareas con detalles completos

En el paso anterior, aprendiste cómo listar la información básica sobre las tareas de un servicio. A veces, necesitas información más detallada sobre cada tarea, como el ID completo de la tarea, el ID del contenedor, etc.

Para obtener los detalles completos de las tareas, puedes utilizar la opción --no-trunc con el comando docker service ps. Esta opción evita que Docker trunque la salida, mostrando los IDs completos y otra información.

Listemos las tareas del servicio my-nginx con detalles completos:

docker service ps --no-trunc my-nginx

Verás una salida similar al paso anterior, pero con el ID completo de la tarea y posiblemente información más detallada dependiendo del estado y la configuración de la tarea.

ID                                                           NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE            ERROR   PORTS
<full_task_id>                                               my-nginx.1   nginx:latest   <node_name>   Running         Running 10 seconds ago

Comparando esta salida con la del paso anterior, puedes ver el ID completo de la tarea en lugar de una versión truncada. Esto es útil cuando necesitas hacer referencia a una tarea específica de manera precisa, por ejemplo, cuando inspeccionas una tarea.

Filtrar tareas por nombre o nodo

En un clúster Swarm más grande, es posible que tengas muchas tareas en ejecución en múltiples nodos. Para encontrar tareas específicas, puedes filtrar la salida de docker service ps basándote en varios criterios, como el nombre de la tarea o el nodo en el que se está ejecutando.

La opción --filter se utiliza para filtrar. La sintaxis básica es --filter "key=value".

Para filtrar tareas por nombre, puedes utilizar la clave name. Por ejemplo, para encontrar tareas cuyo nombre comience con my-nginx, puedes utilizar:

docker service ps --filter "name=my-nginx.1" my-nginx

Este comando mostrará solo la tarea llamada my-nginx.1 para el servicio my-nginx. Ten en cuenta que los nombres de las tareas suelen tener el formato nombre_del_servicio.numero_de_tarea.

Para filtrar tareas por el nodo en el que se están ejecutando, puedes utilizar la clave node. Primero, necesitas conocer el nombre del nodo en el que se está ejecutando tu tarea. Puedes obtenerlo de la salida de docker service ps. Supongamos que el nombre de tu nodo es labex-node.

docker service ps --filter "node=labex-node" my-nginx

Este comando mostrará las tareas del servicio my-nginx que se están ejecutando en el nodo llamado labex-node. Reemplaza labex-node con el nombre real de tu nodo si es diferente.

Puedes combinar filtros utilizando múltiples opciones --filter.

Filtrar tareas por estado deseado

Además de filtrar por nombre o nodo, también puedes filtrar tareas según su estado deseado. El estado deseado indica en qué estado el gestor de Swarm quiere que se encuentre la tarea (por ejemplo, Running (En ejecución), Shutdown (Detenido), Rejected (Rechazado)).

Para filtrar tareas por estado deseado, se utiliza la opción --filter con la clave desired-state.

Por ejemplo, para listar solo las tareas que actualmente se desean que estén Running (En ejecución) para el servicio my-nginx, se puede utilizar:

docker service ps --filter "desired-state=running" my-nginx

Dado que nuestro servicio my-nginx está en ejecución, este comando mostrará las tareas activas.

Si se quisiera ver las tareas que se han detenido, se podría utilizar:

docker service ps --filter "desired-state=shutdown" my-nginx

Actualmente, este comando puede no mostrar ninguna salida a menos que se haya reducido la escala o eliminado tareas.

También se puede filtrar para ver las tareas que han sido Rejected (Rechazadas). Este estado indica que el gestor de Swarm no pudo iniciar la tarea.

docker service ps --filter "desired-state=rejected" my-nginx

Comprender los estados deseados es fundamental para monitorear la salud y el estado de tus servicios en un clúster Swarm.

Formatear la salida de las tareas de servicio

En este último paso, aprenderás cómo personalizar el formato de salida del comando docker service ps. Esto es útil cuando quieres extraer información específica o integrar la salida con otras herramientas.

La opción --format te permite especificar una plantilla de Go para formatear la salida. Puedes utilizar marcadores de posición como .ID, .Name, .Image, .Node, .DesiredState, .CurrentState, .Error y .Ports para mostrar los atributos correspondientes de la tarea.

Por ejemplo, para mostrar solo el ID de la tarea, el nombre y la imagen en formato de tabla, puedes utilizar:

docker service ps --format "table {{.ID}}\t{{.Name}}\t{{.Image}}" my-nginx

Este comando producirá una salida similar a esta:

ID             NAME         IMAGE
<task_id>      my-nginx.1   nginx:latest

También puedes formatear la salida como una lista de valores, lo cual es útil para scripting. Por ejemplo, para obtener solo los IDs de las tareas:

docker service ps --format "{{.ID}}" my-nginx

Esto mostrará solo el/los ID(s) de la tarea(s).

Probemos otro formato, mostrando el nombre de la tarea y el nodo en el que se está ejecutando:

docker service ps --format "Task: {{.Name}} is running on node: {{.Node}}" my-nginx

La salida se verá así:

Task: my-nginx.1 is running on node: <node_name>

Experimenta con diferentes marcadores de posición y opciones de formato para obtener la salida que necesites.

Finalmente, eliminemos el servicio que creamos:

docker service rm my-nginx

Este comando elimina el servicio my-nginx y sus tareas asociadas.

Resumen

En este laboratorio, aprendiste cómo utilizar el comando docker service ps para listar las tareas asociadas a un servicio de Docker Swarm. Comenzaste creando un simple servicio nginx y luego utilizaste docker service ps <service_name> para ver sus tareas, comprendiendo las columnas básicas de salida como ID, Nombre, Imagen, Nodo, Estado Deseado y Estado Actual.

Además, exploraste cómo obtener información más detallada de las tareas utilizando la opción --no-trunc para evitar la truncación de la salida, lo que te permitió ver los IDs completos y otros detalles exhaustivos sobre cada tarea.