如何使用 docker node ls 命令列出 Swarm 节点

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何有效地使用 docker node ls 命令来管理和检查 Docker Swarm 中的节点。我们将从初始化一个 Docker Swarm 并列出所有节点开始。

随后,你将探索各种过滤选项,根据节点 ID、角色(管理者或工作节点)和自定义节点标签等条件来缩小节点列表范围。最后,你将学习如何格式化输出,只显示你需要的特定信息,从而提高你快速获取相关节点详细信息的能力。


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/inspect("Inspect Container") subgraph Lab Skills docker/ls -.-> lab-555182{{"如何使用 docker node ls 命令列出 Swarm 节点"}} docker/ps -.-> lab-555182{{"如何使用 docker node ls 命令列出 Swarm 节点"}} docker/inspect -.-> lab-555182{{"如何使用 docker node ls 命令列出 Swarm 节点"}} end

列出 Swarm 中的所有节点

在这一步中,你将学习如何列出 Docker Swarm 中的所有节点。在列出节点之前,你需要初始化一个 Docker Swarm。

首先,让我们在当前机器上初始化 Swarm。这台机器将成为管理节点。

docker swarm init

你应该会看到输出信息,表明 Swarm 已初始化,并提供了一个将其他节点加入 Swarm 的命令。

现在 Swarm 已经初始化,你可以使用 docker node ls 命令列出 Swarm 中的节点。

docker node ls

这个命令将显示一个表格,其中包含 Swarm 中节点的信息,包括它们的 ID、主机名、状态、可用性、管理状态和引擎版本。由于你只有一个节点(刚刚初始化的管理节点),列表中会只有一个条目。

输出将类似于以下内容:

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
<node_id> *                   <hostname>          Ready     Active         Leader           20.10.21

ID 旁边的 * 表示这是你正在运行命令的当前节点。MANAGER STATUS 列显示该节点是 Swarm 的 Leader

按 ID 过滤节点

在这一步中,你将学习如何根据节点 ID 过滤 Docker Swarm 中的节点列表。当你有很多节点,并且想查看某个特定节点的信息时,这个方法很有用。

首先,让我们再次列出所有节点,以获取管理节点的 ID。

docker node ls

从输出中识别节点的 ID,它是一长串字符。

现在,你可以使用带有 id 键的 --filter 标志来过滤输出,只显示具有指定 ID 的节点。将 <node_id> 替换为你从前面命令中获得的实际 ID。

docker node ls --filter id=<node_id>

这个命令将只显示与给定 ID 的节点对应的行。当你知道某个特定节点的 ID 时,这是一种快速查找该节点信息的简单方法。

例如,如果你的节点 ID 是 24ifihg345h345h345h345h34,命令将是:

docker node ls --filter id=24ifihg345h345h345h345h34

输出将与上一步中 docker node ls 命令输出的管理节点的那一行相同。

按角色过滤节点

在这一步中,你将学习如何根据节点的角色过滤 Docker Swarm 中的节点列表。在 Docker Swarm 中,节点可以有两种角色:manager(管理节点)或 worker(工作节点)。管理节点负责管理 Swarm,而工作节点则运行服务。

由于目前你的 Swarm 中只有一个节点,且它是管理节点,让我们过滤列表以仅显示管理节点。你可以使用带有 role 键和 manager 值的 --filter 标志。

docker node ls --filter role=manager

这个命令将只显示具有 manager 角色的节点。在当前的设置中,它将显示与之前相同的单个节点。

如果你在 Swarm 中有工作节点,你可以使用以下命令过滤列表以仅显示工作节点:

docker node ls --filter role=worker

目前,这个命令不会显示任何输出,因为 Swarm 中没有工作节点。

了解如何按角色过滤对于管理包含多个管理节点和工作节点的大型 Swarm 非常重要。

按节点标签过滤节点

在这一步中,你将学习如何根据分配给节点的标签来过滤节点。节点标签是键值对,你可以将其附加到节点上,用于组织目的或控制服务的部署。

首先,让我们为管理节点添加一个标签。我们将添加一个标签 location=datacenter1。为此,你可以使用 docker node update 命令,后面跟上节点 ID 和 --label-add 标志。

再次使用 docker node ls -q 获取节点 ID:

NODE_ID=$(docker node ls -q)
echo $NODE_ID

现在,使用该标签更新节点:

docker node update --label-add location=datacenter1 $NODE_ID

你应该会看到确认节点更新的输出。

要验证标签是否已添加,你可以检查节点:

docker node inspect $NODE_ID

在输出中查找 Labels 部分。你应该会看到 "location": "datacenter1"

现在,让我们根据这个标签过滤节点。你可以使用带有 label 键的 --filter 标志,并以 key=value 的格式指定标签。

docker node ls --filter label=location=datacenter1

这个命令将只显示具有标签 location 且值为 datacenter1 的节点。在我们的例子中,它将显示我们的管理节点。

你还可以通过仅提供标签键来过滤具有特定标签键的节点,而不考虑其值:

docker node ls --filter label=location

这将显示所有定义了 location 标签的节点。

格式化输出以显示特定信息

在这一步中,你将学习如何格式化 docker node ls 命令的输出,以便仅显示你感兴趣的信息。这对于编写脚本或仅需快速查看特定细节时非常有用。

你可以使用 --format 标志来指定输出格式。你可以使用 Go 模板语法来定义所需的输出。你可以访问的常见字段包括 .ID.Hostname.Status.Availability.ManagerStatus.EngineVersion

让我们仅显示节点 ID 和主机名。

docker node ls --format "{{.ID}}\t{{.Hostname}}"

{{.ID}}{{.Hostname}} 分别是节点 ID 和主机名的占位符。\t 插入一个制表符用于分隔。

输出将如下所示:

<node_id>	<hostname>

现在,让我们显示主机名和管理节点状态。

docker node ls --format "Hostname: {{.Hostname}}, Manager Status: {{.ManagerStatus}}"

这将输出:

Hostname: <hostname>, Manager Status: Leader

你可以将过滤和格式化结合使用。例如,让我们过滤出管理节点并显示它们的 ID 和主机名。

docker node ls --filter role=manager --format "{{.ID}}\t{{.Hostname}}"

此命令首先过滤节点,仅包含管理节点,然后格式化输出以显示它们的 ID 和主机名。

使用 --format 标志可以灵活地查看和处理有关 Docker Swarm 节点的信息。

总结

在本次实验中,你学习了如何使用 docker node ls 命令来管理和查看 Docker Swarm 中节点的信息。首先,你在当前机器上初始化了一个 Docker Swarm,使其成为管理节点。然后,你使用 docker node ls 列出了 Swarm 中的所有节点,并观察了默认输出,其中包括 ID、主机名、状态、可用性、管理节点状态和引擎版本。

接着,你探索了如何使用 --filter 标志来过滤节点列表。具体来说,你学习了如何根据节点的唯一 ID 进行过滤,从而能够在大型 Swarm 中快速定位并查看特定节点的信息。本次实验还涵盖了按角色和节点标签进行过滤,以及格式化输出以仅显示特定信息的内容,不过提供的文档仅详细介绍了按 ID 进行过滤的方法。