Cómo usar el comando docker stack ps para listar las tareas de una pila

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 utilizar de manera efectiva el comando docker stack ps para enumerar y gestionar las tareas dentro de una pila (stack) de Docker. Comenzará desplegando una pila de muestra utilizando Docker Compose, una herramienta poderosa para definir y ejecutar aplicaciones de múltiples contenedores.

Después del despliegue de la pila, explorará las diversas capacidades de docker stack ps. Esto incluye enumerar todas las tareas de la pila, filtrar las tareas según sus nombres, formatear la salida para mostrar campos específicos de interés y, finalmente, mostrar solo los ID de las tareas para una vista concisa. Esta experiencia práctica le proporcionará las habilidades necesarias para monitorear y comprender el estado de las tareas de su pila de Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555236{{"Cómo usar el comando docker stack ps para listar las tareas de una pila"}} docker/rm -.-> lab-555236{{"Cómo usar el comando docker stack ps para listar las tareas de una pila"}} docker/pull -.-> lab-555236{{"Cómo usar el comando docker stack ps para listar las tareas de una pila"}} end

Desplegar una pila de muestra

En este paso, aprenderá cómo desplegar una pila de muestra utilizando Docker Compose. Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Con Compose, se utiliza un archivo YAML para configurar los servicios de la aplicación. Luego, con un solo comando, se crean y se inician todos los servicios a partir de la configuración.

Dado que Docker Compose no está preinstalado en el entorno de LabEx, primero debe instalarlo. Instalaremos la versión 1.29.2 de Docker Compose, que es compatible con la versión de Docker instalada.

Primero, descargue el binario de Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Este comando descarga el binario de Docker Compose del repositorio oficial de GitHub y lo guarda en /usr/local/bin/docker-compose. Las partes $(uname -s) y $(uname -m) detectan automáticamente el sistema operativo y la arquitectura.

A continuación, aplique permisos de ejecución al binario:

sudo chmod +x /usr/local/bin/docker-compose

Este comando hace que el archivo descargado sea ejecutable.

Ahora, verifique la instalación comprobando la versión de Docker Compose:

docker-compose --version

Debería ver una salida similar a docker-compose version 1.29.2, build 5becea4c.

Ahora que Docker Compose está instalado, creemos un archivo simple de Docker Compose para definir nuestra pila. Crearemos un archivo llamado docker-compose.yml en el directorio ~/project.

Utilice el editor nano para crear y editar el archivo:

nano ~/project/docker-compose.yml

Pegue el siguiente contenido en el archivo docker-compose.yml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: echo "Hello from Alpine"

Este archivo docker-compose.yml define dos servicios:

  • web: Utiliza la imagen nginx:latest y mapea el puerto 80 del host al puerto 80 del contenedor.
  • app: Utiliza la imagen alpine:latest y ejecuta un simple comando echo.

Guarde el archivo presionando Ctrl + S y salga del editor presionando Ctrl + X.

Antes de desplegar la pila, descarguemos las imágenes necesarias. Si bien Docker Compose puede descargar las imágenes automáticamente durante el despliegue, descargarlas explícitamente de antemano puede ser útil en ocasiones.

Descargue la imagen nginx:latest:

docker pull nginx:latest

Descargue la imagen alpine:latest:

docker pull alpine:latest

Ahora, despliegue la pila utilizando el comando docker-compose up. La bandera -d ejecuta los contenedores en modo desatendido (en segundo plano).

Navegue al directorio ~/project donde creó el archivo docker-compose.yml:

cd ~/project

Luego, ejecute el comando:

docker-compose up -d

Este comando lee el archivo docker-compose.yml y crea e inicia los servicios definidos. Debería ver una salida que indique la creación y el inicio de los servicios web y app.

Para verificar que los servicios estén en ejecución, puede enumerar los contenedores en ejecución:

docker ps

Debería ver dos contenedores en ejecución, uno para el servicio web (basado en nginx) y uno para el servicio app (basado en alpine).

Enumerar todas las tareas de la pila

En este paso, aprenderá cómo enumerar todas las tareas (contenedores) asociadas con la pila que desplegó en el paso anterior. En Docker Swarm o Kubernetes, el término "tarea" se utiliza a menudo para referirse a una instancia en ejecución de un servicio. Aunque aquí estamos utilizando Docker Compose, que técnicamente no utiliza el concepto de "tarea" de la misma manera que Swarm, todavía podemos enumerar los contenedores que componen nuestra pila desplegada.

El comando docker-compose ps se utiliza para enumerar los contenedores gestionados por Docker Compose para el proyecto actual (el directorio que contiene el archivo docker-compose.yml).

Asegúrese de que todavía esté en el directorio ~/project donde se encuentra su archivo docker-compose.yml:

cd ~/project

Ahora, ejecute el comando docker-compose ps:

docker-compose ps

Este comando mostrará una lista de contenedores definidos en su archivo docker-compose.yml, junto con su estado actual, comando y puertos.

Debería ver una salida similar a esta (los nombres e IDs de los contenedores variarán):

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

Esta salida muestra los dos servicios definidos en su docker-compose.yml: app y web. La columna State indica si el contenedor está en ejecución (Up) o ha salido (Exit 0). La columna Ports muestra el mapeo de puertos para el servicio web.

El contenedor app salió porque su comando echo "Hello from Alpine" terminó de ejecutarse. El contenedor web sigue en ejecución porque el servidor Nginx está diseñado para ejecutarse de forma continua.

Este comando es útil para ver rápidamente qué servicios de su pila están en ejecución y su estado básico.

Filtrar tareas por nombre

En este paso, aprenderá cómo filtrar la lista de contenedores gestionados por Docker Compose en función del nombre de su servicio. Esto es útil cuando tiene una pila grande con muchos servicios y solo desea ver el estado de un servicio específico.

El comando docker-compose ps le permite especificar el nombre del servicio como argumento para filtrar la salida.

Asegúrese de estar en el directorio ~/project:

cd ~/project

Para enumerar solo el contenedor del servicio web, ejecute el siguiente comando:

docker-compose ps web

Este comando solo mostrará la información del contenedor asociado al servicio web definido en su docker-compose.yml.

Debería ver una salida similar a esta:

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

Del mismo modo, para enumerar solo el contenedor del servicio app, ejecute:

docker-compose ps app

Esto mostrará la información del contenedor app:

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0

Filtrar por nombre de servicio es una forma simple pero efectiva de gestionar y monitorear componentes individuales dentro de su pila de Docker Compose.

Formatear la salida para mostrar campos específicos

En este paso, aprenderá cómo formatear la salida del comando docker-compose ps para mostrar solo campos específicos. Esto es útil cuando necesita extraer información particular sobre sus servicios, como sus nombres o estado, para scripting o procesamiento adicional.

El comando docker-compose ps admite la opción --format, que le permite especificar el formato de salida utilizando plantillas de Go.

Asegúrese de estar en el directorio ~/project:

cd ~/project

Para mostrar solo el nombre del servicio y el estado del contenedor, puede utilizar el siguiente comando:

docker-compose ps --format "table {{.Service}}\t{{.State}}"

Analicemos la opción --format:

  • "table": Esto especifica que la salida debe estar en formato de tabla con encabezados.
  • {{.Service}}: Este es un marcador de posición de la plantilla de Go que representa el nombre del servicio.
  • \t: Este es un carácter de tabulación, utilizado aquí para separar las columnas.
  • {{.State}}: Este es un marcador de posición de la plantilla de Go que representa el estado del contenedor.

La salida se verá así:

SERVICE         STATE
app             Exit 0
web             Up

También puede incluir otros campos en la cadena de formato. Por ejemplo, para mostrar el nombre del servicio, la imagen y el estado:

docker-compose ps --format "table {{.Service}}\t{{.Image}}\t{{.State}}"

La salida será:

SERVICE         IMAGE           STATE
app             alpine:latest   Exit 0
web             nginx:latest    Up

Utilizar la opción --format brinda flexibilidad en cómo visualiza y procesa la información sobre sus servicios de Docker Compose.

Mostrar solo los IDs de las tareas

En este paso, aprenderá cómo mostrar solo los IDs de los contenedores de los servicios en su pila de Docker Compose. Esto es particularmente útil cuando necesita pasar los IDs de los contenedores a otros comandos con fines de automatización o scripting.

Volveremos a utilizar la opción --format con el comando docker-compose ps, pero esta vez especificaremos solo el campo del ID del contenedor.

Asegúrese de estar en el directorio ~/project:

cd ~/project

Para mostrar solo los IDs de los contenedores, utilice el siguiente comando:

docker-compose ps -q

La opción -q es una abreviatura de --quiet, que imprime solo los IDs de los contenedores.

Como alternativa, puede obtener el mismo resultado utilizando la opción --format:

docker-compose ps --format "{{.ID}}"

Este comando utiliza la plantilla de Go {{.ID}} para extraer solo el ID del contenedor de cada servicio.

La salida de cualquiera de los comandos será una lista de IDs de contenedores, uno por línea:

<container_id_for_app>
<container_id_for_web>

(Los IDs reales serán diferentes en su entorno).

Mostrar solo los IDs es un requisito común cuando necesita interactuar programáticamente con sus contenedores, por ejemplo, para detenerlos o eliminarlos.

Finalmente, limpiemos la pila desplegada deteniéndola. Esto detendrá y eliminará los contenedores y redes creados por docker-compose up.

Asegúrese de estar en el directorio ~/project:

cd ~/project

Ejecute el siguiente comando:

docker-compose down

Este comando detendrá y eliminará los contenedores de los servicios web y app. Debería ver una salida que indique que los contenedores y la red se están eliminando.

Después de ejecutar docker-compose down, puede verificar que los contenedores ya no están en ejecución utilizando docker ps:

docker ps

Este comando ahora debería mostrar que no hay contenedores en ejecución.

Resumen

En este laboratorio, aprendiste cómo desplegar una pila de muestra utilizando Docker Compose. Esto incluyó instalar Docker Compose, crear un archivo docker-compose.yml para definir servicios y luego desplegar la pila.

Después del despliegue, aprenderás cómo usar el comando docker stack ps para listar todas las tareas dentro de la pila desplegada. También explorarás cómo filtrar estas tareas por nombre, formatear la salida para mostrar campos específicos y mostrar solo los IDs de las tareas, lo que demuestra la flexibilidad del comando docker stack ps para monitorear y gestionar las tareas de la pila.