Cómo usar el comando docker stack services para listar 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 utilizar de manera efectiva el comando docker stack services para gestionar e inspeccionar los servicios dentro de una pila (stack) de Docker. Comenzaremos configurando una pila de Docker simple utilizando Docker Compose, lo cual implica instalar Docker Compose y desplegar una aplicación básica definida en un archivo docker-compose.yml.

Una vez que la pila esté en funcionamiento, explorará la funcionalidad central del comando docker stack services para enumerar todos los servicios en una pila. A partir de esto, aprenderá cómo refinar la lista de servicios filtrando por nombre e ID de servicio. Finalmente, descubrirá cómo personalizar el formato de salida de la lista de servicios para mostrar la información que necesita de manera clara y organizada.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ps -.-> lab-555238{{"Cómo usar el comando docker stack services para listar servicios"}} docker/rm -.-> lab-555238{{"Cómo usar el comando docker stack services para listar servicios"}} docker/network -.-> lab-555238{{"Cómo usar el comando docker stack services para listar servicios"}} end

Listar todos los servicios en una pila

En este paso, aprenderá cómo listar todos los servicios que se ejecutan dentro de una pila (stack) de Docker. Antes de poder listar los servicios, necesitamos tener una pila en funcionamiento. Dado que Docker Compose no está preinstalado, primero lo instalaremos y luego desplegaremos una pila simple.

Primero, instalemos Docker Compose. Descargaremos el binario y lo haremos ejecutable.

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

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

nano ~/project/docker-compose.yml

Agregue el siguiente contenido al archivo:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: sleep 3600

Este archivo define una pila con dos servicios: web que utiliza la imagen nginx y app que utiliza la imagen alpine. El servicio web mapea el puerto 80 del host al puerto 80 del contenedor. El servicio app simplemente ejecuta el comando sleep 3600 para mantener el contenedor en ejecución.

Guarde el archivo y salga del editor (Ctrl+X, Y, Enter en nano).

Ahora, despleguemos la pila utilizando docker stack deploy. Nombraremos nuestra pila mystack.

docker stack deploy -c ~/project/docker-compose.yml mystack

Este comando lee el archivo docker-compose.yml y crea los servicios definidos en él como una pila de Docker llamada mystack. Debería ver una salida que indique que se están creando los servicios.

Una vez que la pila está desplegada, puede listar todos los servicios en la pila utilizando el comando docker stack services seguido del nombre de la pila.

docker stack services mystack

Este comando mostrará una tabla con información sobre los servicios en la pila mystack, incluyendo su ID, nombre, modo, réplicas, imagen y puertos.

Debería ver una salida similar a esta:

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest
xxxxxxxxxxxx   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

La salida enumera los servicios mystack_app y mystack_web, lo que confirma que se están ejecutando como parte de la pila mystack.

Filtrar servicios por nombre

En este paso, aprenderá cómo filtrar la lista de servicios en una pila (stack) de Docker según su nombre. Esto es útil cuando tiene muchos servicios en una pila y solo desea ver información sobre servicios específicos.

El comando docker stack services admite la opción --filter, que le permite especificar criterios para filtrar la salida. Para filtrar por nombre de servicio, puede utilizar el filtro name.

La sintaxis para filtrar por nombre es --filter name=<service_name>. Recuerde que los nombres de los servicios en una pila suelen tener como prefijo el nombre de la pila, seguido de un guión bajo y el nombre del servicio definido en el archivo docker-compose.yml (por ejemplo, mystack_web).

Filtrémos los servicios en nuestra pila mystack para mostrar solo el servicio web.

docker stack services mystack --filter name=mystack_web

Este comando solo mostrará la fila correspondiente al servicio mystack_web.

Debería ver una salida similar a esta:

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Note que solo se muestra la información del servicio mystack_web.

Del mismo modo, puede filtrar para ver solo el servicio app:

docker stack services mystack --filter name=mystack_app

Esto mostrará la información del servicio mystack_app:

ID             NAME                 MODE         REPLICAS   IMAGE
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest

Utilizar el filtro name le permite encontrar y ver rápidamente los detalles de servicios específicos dentro de una pila grande.

Filtrar servicios por ID

En este paso, aprenderá cómo filtrar la lista de servicios en una pila (stack) de Docker según su ID único. Si bien filtrar por nombre suele ser más intuitivo, filtrar por ID es útil cuando necesita ser absolutamente preciso o cuando se trata de servicios que pueden tener nombres similares.

Cada servicio en una pila de Docker se le asigna un ID único. Puede ver estos IDs en la primera columna de la salida del comando docker stack services.

Para filtrar por ID de servicio, se utiliza la opción --filter con el filtro id. La sintaxis es --filter id=<service_id>. Solo necesita proporcionar un prefijo suficiente del ID para identificar de manera única el servicio.

Primero, listemos todos los servicios nuevamente para obtener sus IDs.

docker stack services mystack

Mire la salida e identifique los IDs de los servicios mystack_web y mystack_app. Los IDs serán una cadena de caracteres hexadecimales. Por ejemplo, la salida podría verse así (sus IDs serán diferentes):

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest
yyyyyyyyyyyy   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Digamos que el ID de mystack_web comienza con yyyyyyyyyyyy. Puede filtrar por este ID (o un prefijo único más corto) de la siguiente manera:

docker stack services mystack --filter id=yyyyyyyyyyyy

Reemplace yyyyyyyyyyyy con el comienzo real del ID de su servicio mystack_web.

Este comando mostrará solo la fila del servicio con el ID coincidente.

Debería ver una salida similar a esta, mostrando solo el servicio mystack_web:

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
yyyyyyyyyyyy   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Del mismo modo, puede filtrar por el ID del servicio mystack_app. Encuentre su ID en la salida de docker stack services mystack y úselo en el filtro. Por ejemplo, si el ID comienza con xxxxxxxxxxxx:

docker stack services mystack --filter id=xxxxxxxxxxxx

Reemplace xxxxxxxxxxxx con el comienzo real del ID de su servicio mystack_app.

Esto mostrará la información del servicio mystack_app:

ID             NAME                 MODE         REPLICAS   IMAGE
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest

Filtrar por ID proporciona una forma precisa de apuntar a servicios específicos, especialmente en scripts automatizados o cuando se trata de servicios que pueden tener nombres similares.

Formatear la salida de la lista de servicios

En este paso, aprenderá cómo formatear la salida del comando docker stack services. Por defecto, la salida se muestra en un formato de tabla legible por humanos. Sin embargo, puede utilizar la opción --format para personalizar la salida, lo cual es especialmente útil para scripting o cuando necesita información específica en un formato diferente.

La opción --format acepta una cadena de plantilla de Go. Esto le permite especificar exactamente qué campos mostrar y cómo formatearlos. Algunos campos comunes que quizás desee mostrar son .ID, .Name, .Image, .Mode, .Replicas y .Ports.

Intentemos formatear la salida para mostrar solo el ID del servicio, el nombre y la imagen, separados por tabulaciones.

docker stack services mystack --format "{{.ID}}\t{{.Name}}\t{{.Image}}"

En este comando:

  • {{.ID}}, {{.Name}} y {{.Image}} son marcadores de posición de plantilla de Go que serán reemplazados por los valores respectivos de cada servicio.
  • \t representa un carácter de tabulación, utilizado aquí como separador.

La salida ahora será una lista de servicios, donde cada línea contendrá el ID, el nombre y la imagen, separados por tabulaciones:

xxxxxxxxxxxx	mystack_app	alpine:latest
yyyyyyyyyyyy	mystack_web	nginx:latest

(Recuerde que los IDs serán diferentes en su entorno).

También puede formatear la salida como una lista, lo cual puede ser más fácil de analizar en algunos casos. Por ejemplo, para listar el nombre del servicio y el número de réplicas:

docker stack services mystack --format "- {{.Name}} (Replicas: {{.Replicas}})"

Esto generará la siguiente salida:

- mystack_app (Replicas: 1/1)
- mystack_web (Replicas: 1/1)

La opción --format proporciona una forma poderosa de adaptar la salida de docker stack services a sus necesidades específicas, lo que facilita la integración con otras herramientas o scripts.

Finalmente, eliminemos la pila (stack) desplegada.

docker stack rm mystack

Este comando eliminará todos los servicios y redes asociados a la pila mystack. Debería ver una salida que indique que la pila se está eliminando.

Resumen

En este laboratorio, aprendiste cómo listar los servicios dentro de una pila (stack) de Docker utilizando el comando docker stack services. Esto implicó primero instalar Docker Compose y desplegar una pila simple definida en un archivo docker-compose.yml. Luego, utilizaste docker stack services <stack_name> para mostrar una tabla con todos los servicios de la pila desplegada.

El laboratorio también cubrió cómo filtrar servicios por nombre e ID, lo que te permitió reducir la lista a servicios específicos. Finalmente, exploraste cómo formatear la salida del comando docker stack services para personalizar la información mostrada.