Cómo usar el comando docker node ps para listar tareas

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 el comando docker node ps para listar y filtrar las tareas que se ejecutan en un nodo de Docker Swarm. Comenzarás inicializando un Docker Swarm y creando un servicio simple para generar tareas.

Luego, explorarás cómo listar todas las tareas en un nodo específico, filtrar tareas según su nombre y estado deseado, y finalmente, dar formato a la salida de la lista de tareas para una mejor legibilidad y extracción de información. Esta experiencia práctica te proporcionará habilidades prácticas para monitorear y gestionar tareas dentro de tu clúster de Docker Swarm.


Skills Graph

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

Listar todas las tareas en un nodo

En este paso, aprenderás cómo listar todas las tareas que se ejecutan en un nodo de Docker Swarm. Docker Swarm es una herramienta de orquestación de contenedores que te permite gestionar un clúster de nodos de Docker. Una tarea es una instancia en ejecución de un servicio.

Antes de listar las tareas, necesitamos tener un servicio de Docker Swarm en ejecución. Para este laboratorio, utilizaremos un simple servicio nginx.

Primero, inicialicemos un Docker Swarm en este nodo.

docker swarm init

Deberías ver una salida que indique que el swarm se ha inicializado y que proporcione un token de unión.

Ahora, creemos un servicio simple llamado my-nginx-service utilizando la imagen nginx. Primero descargaremos la imagen nginx para asegurarnos de que esté disponible.

docker pull nginx:latest
docker service create --name my-nginx-service --replicas 1 nginx

El comando docker service create crea un nuevo servicio con una réplica (una tarea). Docker descargará automáticamente la imagen nginx si no está presente, pero la descargamos explícitamente de antemano.

Después de crear el servicio, Docker iniciará una tarea para este servicio en uno de los nodos del swarm (en este caso, el nodo actual).

Para listar todas las tareas que se ejecutan en el nodo, puedes utilizar el comando docker node ps seguido del ID del nodo o del nombre de host. Dado que estamos en el nodo administrador donde se creó el servicio, podemos utilizar el ID del nodo actual.

Para encontrar el ID del nodo, puedes utilizar el comando docker node ls.

docker node ls

Este comando listará todos los nodos del swarm. La salida mostrará el ID del nodo, el nombre de host, el estado, la disponibilidad y el estado del administrador. Copia el ID del nodo actual (el que tiene Leader en MANAGER STATUS).

Ahora, utiliza el comando docker node ps con el ID del nodo que copiaste para listar las tareas en ese nodo. Reemplaza <node_id> con el ID real del nodo.

docker node ps <node_id>

Este comando mostrará una lista de tareas que se ejecutan en el nodo especificado, incluyendo el ID de la tarea, el nombre del servicio, la imagen, el nodo, el estado deseado, el estado actual y el error. Deberías ver la tarea my-nginx-service.1 lista con un estado de Running.

Como alternativa, puedes listar todas las tareas en el swarm utilizando el comando docker task ls. Este comando es útil para ver las tareas en todos los nodos del swarm.

docker task ls

Este comando mostrará información similar a docker node ps, pero lista las tareas de todos los nodos del swarm. Dado que solo tenemos un nodo y una tarea, la salida será similar a docker node ps.

En este paso, aprendiste cómo listar las tareas en un nodo específico utilizando docker node ps y listar todas las tareas en el swarm utilizando docker task ls.

Filtrar tareas por nombre

En este paso, aprenderás cómo filtrar la lista de tareas por su nombre. Esto es útil cuando tienes muchos servicios y tareas en ejecución y solo quieres ver las tareas relacionadas con un servicio específico.

Seguiremos utilizando el my-nginx-service creado en el paso anterior.

Para filtrar las tareas por nombre, puedes utilizar la opción --filter con la clave name en el comando docker task ls. La sintaxis es --filter name=<service_name>.

Filtrémos las tareas para mostrar solo aquellas que pertenecen al my-nginx-service.

docker task ls --filter name=my-nginx-service

Este comando listará solo las tareas cuyo nombre de servicio sea my-nginx-service. Deberías ver la tarea my-nginx-service.1 en la lista.

También puedes filtrar por el nombre completo de la tarea, que incluye el nombre del servicio y el número de la tarea (por ejemplo, my-nginx-service.1).

docker task ls --filter name=my-nginx-service.1

Este comando listará específicamente la tarea con el nombre exacto my-nginx-service.1.

Si tuvieras múltiples servicios en ejecución, filtrar por nombre de servicio mostraría todas las tareas de ese servicio. Por ejemplo, si tuvieras otro servicio llamado my-app-service, ejecutar docker task ls --filter name=my-app-service mostraría todas las tareas de my-app-service.

Filtrar por nombre es una forma poderosa de reducir la salida del comando docker task ls y centrarte en las tareas que te interesan.

Filtrar tareas por estado deseado

En este paso, aprenderás cómo filtrar la lista de tareas en función de su estado deseado. El estado deseado de una tarea es el estado en el que el administrador de Docker Swarm quiere que se encuentre la tarea (por ejemplo, Running (En ejecución), Shutdown (Detenido), Accepted (Aceptado)).

Seguiremos utilizando el my-nginx-service creado en los pasos anteriores. Actualmente, el estado deseado de la tarea de este servicio es Running.

Para filtrar las tareas por estado deseado, puedes utilizar la opción --filter con la clave desired-state en el comando docker task ls. La sintaxis es --filter desired-state=<state>.

Filtrémos las tareas para mostrar solo aquellas con un estado deseado de Running.

docker task ls --filter desired-state=Running

Este comando listará solo las tareas cuyo estado deseado es Running. Deberías ver la tarea my-nginx-service.1 en la lista.

Ahora, reduzcamos la escala del servicio a 0 réplicas. Esto cambiará el estado deseado de la tarea existente a Shutdown.

docker service scale my-nginx-service=0

Después de reducir la escala, la tarea eventualmente pasará a un estado Shutdown. Puede tardar unos momentos en actualizarse el estado.

Ahora, filtrémos las tareas para mostrar aquellas con un estado deseado de Shutdown.

docker task ls --filter desired-state=Shutdown

Ahora deberías ver la tarea my-nginx-service.1 en la lista con un estado deseado de Shutdown.

Otros posibles estados deseados incluyen Accepted (cuando una tarea es aceptada por un nodo trabajador pero aún no se está ejecutando) y Failed (si una tarea no pudo iniciar).

Filtrar por estado deseado es útil para monitorear el estado de tus servicios e identificar tareas que no se encuentran en el estado esperado.

Formatear la salida de las tareas

En este paso, aprenderás cómo formatear la salida del comando docker task ls para mostrar información específica en un formato personalizado. Esto es útil para scripting o generar informes.

Seguiremos utilizando el my-nginx-service y su tarea.

Para formatear la salida, puedes utilizar la opción --format con una cadena de plantilla de Go. La cadena de plantilla te permite especificar qué campos mostrar y cómo formatearlos.

Mostremos solo el ID de la tarea, el nombre del servicio y el estado actual de las tareas.

docker task ls --format "{{.ID}}\t{{.Service}}\t{{.CurrentState}}"

En este comando:

  • {{.ID}} se refiere al ID de la tarea.
  • {{.Service}} se refiere al nombre del servicio.
  • {{.CurrentState}} se refiere al estado actual de la tarea.
  • \t se utiliza para insertar un carácter de tabulación entre los campos para una mejor legibilidad.

La salida mostrará el ID de la tarea, el nombre del servicio y el estado actual de cada tarea.

También puedes utilizar el formato table para mostrar la salida en una tabla con columnas específicas.

docker task ls --format "table {{.ID}}\t{{.Service}}\t{{.CurrentState}}\t{{.Node}}"

Este comando mostrará una tabla con columnas para ID de Tarea, Servicio, Estado Actual y Nodo.

Para ver todos los campos disponibles que puedes utilizar en la cadena de formato, puedes inspeccionar una tarea utilizando el comando docker task inspect y observar la salida JSON. Sin embargo, algunos campos comunes incluyen:

  • .ID: ID de la tarea
  • .Service: Nombre del servicio
  • .Image: Nombre de la imagen
  • .Node: Nombre del host del nodo
  • .DesiredState: Estado deseado de la tarea
  • .CurrentState: Estado actual de la tarea
  • .Error: Mensaje de error si la tarea falló
  • .CreatedAt: Marca de tiempo cuando se creó la tarea
  • .UpdatedAt: Marca de tiempo cuando se actualizó la tarea por última vez

Mostremos el ID de la tarea, la imagen y el nodo en el que se está ejecutando.

docker task ls --format "{{.ID}}\t{{.Image}}\t{{.Node}}"

Este comando mostrará el ID de la tarea, la imagen utilizada por la tarea y el nodo donde se está ejecutando la tarea.

Formatear la salida te permite personalizar la información mostrada por docker task ls para adaptarla a tus necesidades, ya sea para una inspección rápida o para su uso en scripts.

Finalmente, limpiemos el servicio que creamos.

docker service rm my-nginx-service

Este comando eliminará el servicio y sus tareas asociadas.

Resumen

En este laboratorio, aprendiste cómo utilizar el comando docker node ps para listar las tareas que se ejecutan en un nodo específico de Docker Swarm. Comenzaste inicializando un Docker Swarm y creando un servicio simple de nginx con una réplica. Luego, utilizaste docker node ls para identificar el ID del nodo del administrador actual y, posteriormente, docker node ps <node_id> para mostrar todas las tareas que se ejecutan en ese nodo.

El laboratorio también cubrió cómo refinar la salida de docker node ps filtrando las tareas en función de su nombre y estado deseado, y cómo formatear la salida para una mejor legibilidad. Estos pasos demuestran la flexibilidad del comando docker node ps para monitorear y gestionar tareas dentro de un clúster de Docker Swarm.