简介
在这个实验中,你将学习如何使用 docker node inspect
命令查看 Docker Swarm 节点的详细信息。我们将首先使用节点 ID 来检查单个节点,然后探索如何使用 'self' 关键字来检查当前节点。最后,你将学习如何格式化输出以显示特定信息,以及如何美化打印节点详细信息以提高可读性。通过这个实践经验,你将掌握有效检查和理解 Docker Swarm 节点配置与状态的技能。
在这个实验中,你将学习如何使用 docker node inspect
命令查看 Docker Swarm 节点的详细信息。我们将首先使用节点 ID 来检查单个节点,然后探索如何使用 'self' 关键字来检查当前节点。最后,你将学习如何格式化输出以显示特定信息,以及如何美化打印节点详细信息以提高可读性。通过这个实践经验,你将掌握有效检查和理解 Docker Swarm 节点配置与状态的技能。
在这一步中,你将学习如何检查单个 Docker 节点。docker node inspect
命令可以提供 Docker Swarm 中特定节点的详细信息。
首先,让我们检查一下 LabEx 虚拟机上安装的 Docker 版本。
docker version
你应该会看到类似以下的输出,表明 Docker 版本为 20.10.21:
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.18.9
Git commit: baedd2f
Built: Tue Oct 25 17:58:10 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.9
Git commit: 305620d
Built: Tue Oct 25 17:56:04 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b35cd9b83c7c7b1200458f9f9f8d73288d61e58e
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
现在,让我们初始化一个 Docker Swarm。这是进行节点检查的必要步骤。
docker swarm init
你应该会看到输出表明 Swarm 已初始化,并提供了一个加入令牌:
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
输出显示当前节点现在是一个管理器。xxxxxxxxxxxx
是当前节点的 ID。我们将使用这个 ID 来检查该节点。
现在,让我们使用节点 ID 来检查当前节点。将 YOUR_NODE_ID
替换为 docker swarm init
输出中的实际节点 ID。
docker node inspect YOUR_NODE_ID
例如,如果你的节点 ID 是 abcdef123456
,命令将是:
docker node inspect abcdef123456
这个命令将输出一个大型的 JSON 对象,其中包含该节点的详细信息,包括其状态、角色、主机名等等。
在上一步中,我们使用节点的特定 ID 来检查节点。Docker Swarm 提供了一个便捷的别名 self
来指代当前节点。当你想检查正在操作的节点而又无需知道其 ID 时,这个别名非常有用。
让我们使用 self
别名来检查当前节点。
docker node inspect self
这个命令将生成与使用节点 ID 检查节点时相同的详细 JSON 输出。使用 self
使你的命令更具可移植性且更易于使用,特别是在脚本中或当你无法立即获取节点 ID 时。
输出将是一个大型的 JSON 对象,类似于你在上一步中看到的内容。这个 JSON 包含了当前节点的所有配置和状态信息。
在前面的步骤中,我们看到 docker node inspect
会输出一个大型的 JSON 对象。通常,你只需要从这个输出中获取特定的信息。Docker 提供了 --format
标志,允许你使用 Go 的 text/template
包来提取和格式化特定的数据。
让我们使用 --format
标志来仅显示当前节点的主机名。主机名位于 JSON 输出中的 .Description.Hostname
路径处。
docker node inspect --format '{{ .Description.Hostname }}' self
这个命令将仅输出当前节点的主机名。{{ .Description.Hostname }}
部分是 Go 模板语法,用于访问 JSON 输出中 Description
对象内的 Hostname
字段。
现在,让我们尝试显示节点 ID 和节点可用性。节点 ID 位于 .ID
路径处,可用性位于 .Spec.Availability
路径处。我们可以在格式字符串中组合多个字段。
docker node inspect --format 'ID: {{ .ID }}, Availability: {{ .Spec.Availability }}' self
这个命令将以更易读的格式输出节点 ID 及其可用性。你可以使用这种技术从 docker node inspect
的 JSON 输出中提取任何字段。
在前面的步骤中,我们看到了原始的 JSON 输出以及如何提取特定字段。有时,你希望获得节点信息的更易读、结构化的输出,而无需自己解析原始 JSON。docker node inspect
命令为此提供了 --pretty
标志。
让我们使用 --pretty
标志以更易读的格式显示节点信息。
docker node inspect --pretty self
这个命令将输出节点信息的格式化摘要,包括其 ID、主机名、状态、可用性和角色。与原始 JSON 相比,这个输出一目了然,更易于阅读和理解。
输出将类似于以下内容:
ID: abcdef123456
Hostname: labex-vm
Status: Ready
Availability: Active
Manager Status:
Address: 172.17.0.2:2377
Reachability: Reachable
Leader: Yes
Platform:
Architecture: x86_64
OS: linux
Resources:
NanoCPUs: 2000000000
MemoryBytes: 4177903616
Engine Version: 20.10.21
这种美化打印的输出对于快速检查 Docker Swarm 中节点的状态和关键细节非常有用。
在这个实验中,我们学习了如何使用 docker node inspect
命令查看 Docker Swarm 节点的详细信息。在初始化 Docker Swarm 后,我们首先通过节点 ID 来检查单个节点。
接着,我们探索了如何使用别名 self
来检查当前节点。最后,我们学习了如何格式化输出以显示特定信息,以及如何美化打印节点详细信息以提高可读性。