如何使用 docker stack ls 命令列出堆栈

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 docker stack ls 命令来列出 Docker 堆栈。我们将从安装 Docker Compose 开始,它对于将多容器应用程序定义和部署为堆栈至关重要。然后,你将使用 docker-compose.yml 文件部署一个简单的 Web 服务堆栈,以便有堆栈可供列出。

部署完成后,你将探索使用 docker stack ls 列出堆栈的不同方法。这包括列出所有正在运行的堆栈、使用自定义输出格式列出堆栈以显示特定信息,以及以 JSON 格式列出堆栈以便进行编程处理。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") subgraph Lab Skills docker/ls -.-> lab-555235{{"如何使用 docker stack ls 命令列出堆栈"}} end

列出所有堆栈

在这一步中,你将学习如何列出系统上运行的所有 Docker 堆栈。Docker 堆栈是一组一起部署的服务。在列出堆栈之前,我们需要安装 Docker Compose,它用于定义和运行多容器 Docker 应用程序。

首先,让我们安装 Docker Compose。我们将下载 Docker Compose 二进制文件并使其可执行。

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

第一条命令从官方 GitHub 仓库下载 Docker Compose 二进制文件。$(uname -s)$(uname -m) 用于获取你机器的操作系统和架构,确保下载正确的二进制文件。第二条命令使下载的文件可执行。

现在 Docker Compose 已安装,让我们通过检查版本来验证安装情况。

docker-compose --version

你应该在输出中看到已安装的 Docker Compose 版本。

为了演示如何列出堆栈,我们需要部署一个简单的堆栈。我们将创建一个 docker-compose.yml 文件来定义一个简单的 Web 服务。

nano ~/project/docker-compose.yml

将以下内容粘贴到 docker-compose.yml 文件中:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

这个 docker-compose.yml 文件定义了一个名为 web 的单一服务,它使用 nginx:latest 镜像,并将主机上的 80 端口映射到容器内的 80 端口。

现在,让我们使用 docker stack deploy 命令部署这个堆栈。我们将堆栈命名为 mywebstack

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

-c 标志指定要使用的 Compose 文件,mywebstack 是我们给堆栈起的名字。你将看到指示服务正在创建和部署的输出。

部署堆栈后,你可以使用 docker stack ls 命令列出所有正在运行的堆栈。

docker stack ls

这个命令将显示所有已部署堆栈的列表,包括堆栈名称、服务数量以及每个服务的期望和当前副本数量。你应该在输出中看到 mywebstack 被列出。

以自定义格式列出堆栈

在上一步中,你学习了如何使用默认输出格式列出所有已部署的 Docker 堆栈。在这一步中,你将学习如何自定义 docker stack ls 命令的输出格式,以便仅显示你需要的信息。

docker stack ls 命令支持 --format 标志,它允许你指定一个 Go 模板来格式化输出。当你想提取特定信息或将输出与其他工具集成时,这非常有用。

让我们从列出堆栈名称和每个堆栈中的服务数量开始。为此,我们可以使用 {{.Name}}{{.Services}} 模板字段。

docker stack ls --format "{{.Name}}: {{.Services}}"

在这个命令中,--format "{{.Name}}: {{.Services}}" 告诉 Docker 输出每个堆栈的名称,后跟一个冒号,然后是服务数量。{{.Name}}{{.Services}} 是占位符,将被每个堆栈的实际值替换。

你应该会看到类似于 mywebstack: 1 的输出,表明堆栈的名称及其包含的服务数量。

你还可以在格式字符串中包含其他字段。例如,让我们列出堆栈名称和期望的副本数量。

docker stack ls --format "Stack Name: {{.Name}}, Desired Replicas: {{.Desired}}"

在这里,我们使用 {{.Desired}} 字段来显示堆栈中服务的期望副本数量。

--format 标志非常灵活,允许你组合不同的字段并添加自定义文本。你可以在 docker stack ls 命令的 Docker 文档中找到可用字段的列表。

让我们再试一个例子,列出堆栈名称和当前的副本数量。

docker stack ls --format "Stack: {{.Name}}, Current Replicas: {{.Current}}"

这个命令使用 {{.Current}} 字段来显示堆栈中服务当前运行的副本数量。

使用 --format 标志可以让你根据特定需求定制 docker stack ls 的输出,从而更轻松地处理和分析已部署堆栈的信息。

以 JSON 格式列出堆栈

在前面的步骤中,你学习了如何使用默认格式和自定义格式列出 Docker 堆栈。在这一步中,你将学习如何以 JSON 格式列出 Docker 堆栈。当你需要以编程方式解析输出或将其与其他系统集成时,这种方式特别有用。

和许多其他 Docker 命令一样,docker stack ls 命令支持 --format json 选项,可将结果以 JSON 数组的形式输出。

让我们以 JSON 格式列出已部署的堆栈。

docker stack ls --format json

这个命令将输出一个 JSON 数组,数组中的每个元素代表一个 Docker 堆栈,并包含该堆栈的相关信息,如名称、服务、期望的副本数和当前的副本数。

输出大致如下(具体内容取决于你已部署的堆栈):

[
  {
    "Name": "mywebstack",
    "Services": "1",
    "Desired": "1",
    "Current": "1"
  }
]

这种 JSON 输出结构清晰,使用脚本语言或其他工具进行解析十分方便。例如,你可以使用 jq 这样的工具从 JSON 输出中提取特定字段。

让我们安装 jq,它是一个轻量级且灵活的命令行 JSON 处理器。

sudo apt-get update
sudo apt-get install -y jq

现在 jq 已安装,让我们用它从 JSON 输出中提取已部署堆栈的名称。

docker stack ls --format json | jq '.[].Name'

在这个命令中,我们将 docker stack ls --format json 的 JSON 输出通过管道传递给 jq'.[].Name' 是一个 jq 过滤器,用于从 JSON 数组中的每个对象里选取 Name 字段。

你应该会看到已部署堆栈的名称 mywebstack 作为输出。

以 JSON 格式列出堆栈提供了一种结构化的方式来访问堆栈信息,这对于自动化和集成目的至关重要。

总结

在这个实验中,你学习了如何使用 docker stack ls 命令来列出 Docker 堆栈。实验首先指导你安装 Docker Compose,这是使用 Docker 堆栈的先决条件,并验证了其安装情况。然后,你创建了一个简单的 docker-compose.yml 文件,定义了一个基本的 Web 服务,并使用 docker stack deploy 将其作为名为 mywebstack 的堆栈进行部署。

后续步骤(尽管在提供的内容中未详细说明)将涵盖使用 docker stack ls 列出所有已部署的堆栈、自定义输出格式以显示特定信息,以及以 JSON 格式列出堆栈以便进行编程处理。通过这个实践操作,你获得了使用 docker stack ls 命令及其各种选项来管理和检查 Docker 堆栈的实用知识。