简介
在本实验中,你将学习如何使用 docker stats
命令有效监控 Docker 容器的资源使用情况。你将探索如何实时显示所有运行中容器的资源占用,以及如何通过容器名称或 ID 查看特定容器的资源使用情况。
此外,你还将了解如何查看所有容器(包括已停止的容器)的资源使用情况,以及如何使用自定义模板来格式化 docker stats
命令的输出。最后,你将学习如何获取容器统计数据的单次快照,而无需持续流式输出。
在本实验中,你将学习如何使用 docker stats
命令有效监控 Docker 容器的资源使用情况。你将探索如何实时显示所有运行中容器的资源占用,以及如何通过容器名称或 ID 查看特定容器的资源使用情况。
此外,你还将了解如何查看所有容器(包括已停止的容器)的资源使用情况,以及如何使用自定义模板来格式化 docker stats
命令的输出。最后,你将学习如何获取容器统计数据的单次快照,而无需持续流式输出。
在本步骤中,你将学习如何使用 docker stats
命令实时显示所有运行中 Docker 容器的资源使用情况。该命令会实时输出容器资源使用数据流,包括 CPU、内存、网络 I/O 和块 I/O。
首先,让我们启动几个容器以便进行监控。我们将使用 ubuntu
镜像并以分离模式 (-d
) 运行它们,使它们在后台运行。同时我们会为容器命名以便于识别。
docker pull ubuntu
docker run -d --name container1 ubuntu sleep infinity
docker run -d --name container2 ubuntu sleep infinity
docker run -d --name container3 ubuntu sleep infinity
现在我们已经运行了一些容器,可以使用 docker stats
命令查看它们的资源使用情况。
docker stats
你将看到一个表格,显示每个运行中容器的信息,包括容器 ID、名称、CPU 使用率、内存使用量、网络 I/O、块 I/O 和 PIDs。这些输出会实时更新。
要停止 docker stats
命令,请按 Ctrl+C
。
在上一步中,你已学会如何显示所有运行中容器的资源使用情况。本步骤将教你如何通过向 docker stats
命令提供容器名称或 ID 来显示特定容器的资源使用情况。
要查看单个容器的统计信息,只需在 docker stats
命令后指定其名称或 ID。例如,查看 container1
的统计信息:
docker stats container1
此时你将仅看到 container1
的实时资源使用情况。按 Ctrl+C
可停止输出。
你也可以同时指定多个容器名称或 ID 来查看多个容器的统计信息。例如,查看 container1
和 container2
的统计信息:
docker stats container1 container2
这将同时显示 container1
和 container2
的实时资源使用情况。按 Ctrl+C
可停止输出。
在实际使用中,相比容器 ID,使用容器名称通常更便于记忆和操作,特别是在运行多个容器的情况下。
默认情况下,docker stats
仅显示运行中容器的统计信息。本步骤将教你如何使用 -a
或 --all
标志来显示所有容器的资源使用情况,包括已停止的容器。
首先,让我们停止在前几步中启动的一个容器:
docker stop container3
现在,如果你不带任何标志运行 docker stats
,你将只能看到仍在运行的 container1
和 container2
:
docker stats
按 Ctrl+C
可停止输出。
要查看所有容器的统计信息(包括已停止的 container3
),请使用 -a
标志:
docker stats -a
此时你将看到 container1
、container2
和 container3
都被列出。对于已停止的容器,大多数资源使用字段会显示为 0%
或 0B
,因为它们当前并未实际消耗资源。
这个功能对于获取系统中所有容器的完整概览非常有用,包括它们在停止前的最后已知资源使用情况。
在本步骤中,你将学习如何使用自定义 Go 模板来格式化 docker stats
命令的输出。这使你可以仅显示所需的信息,并以易于解析或阅读的格式呈现。
docker stats
命令支持 --format
标志,该标志接受一个 Go 模板字符串作为参数。你可以在模板中使用各种占位符来表示不同的容器信息片段。一些常用的占位符包括:
.ContainerID
:容器 ID.Name
:容器名称.CPUPerc
:CPU 使用百分比.MemUsage
:内存使用量.NetIO
:网络 I/O.BlockIO
:块 I/O.PIDs
:进程 ID 数量让我们尝试格式化输出,仅显示容器名称、CPU 使用率和内存使用量:
docker stats --format "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
在这个命令中:
--format
指定我们要使用自定义格式"{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
是 Go 模板字符串
{{.Name}}
显示容器名称\t
插入制表符用于分隔{{.CPUPerc}}
显示 CPU 使用百分比{{.MemUsage}}
显示内存使用量你将看到容器名称、CPU 使用率和内存使用量的实时流,用制表符分隔。按 Ctrl+C
可停止输出。
你可以尝试不同的占位符和格式来获得所需的输出。例如,要包含容器 ID 和网络 I/O:
docker stats --format "ID: {{.ContainerID}}\tName: {{.Name}}\tNetIO: {{.NetIO}}"
这提供了更加定制化的容器统计信息视图。
默认情况下,docker stats
会持续输出实时资源使用情况。但有时你可能只需要获取当前统计信息的单次快照,而不需要持续更新。本步骤将教你如何使用 --no-stream
标志来实现这一需求。
--no-stream
标志会指示 docker stats
仅收集一次统计信息后立即退出,而不是持续更新输出。
让我们获取所有运行中容器的单次统计快照:
docker stats --no-stream
你将看到容器统计信息的表格只出现一次,随后命令就会退出。这在编写脚本或只需快速查看当前资源使用情况时非常有用。
你可以将 --no-stream
与其他标志组合使用,例如结合 -a
标志查看所有容器(包括运行中和已停止的)的快照:
docker stats -a --no-stream
这将显示所有容器的单次快照。
你也可以配合指定特定容器使用:
docker stats container1 container2 --no-stream
这将为你提供 container1
和 container2
的单次统计快照。
当你不需要实时更新,只需捕获当前资源使用状态时,使用 --no-stream
会非常高效。
在本实验中,你学习了如何有效使用 docker stats
命令来监控 Docker 容器的资源使用情况。首先,你查看了所有运行中容器的实时资源使用数据,观察了 CPU、内存、网络 I/O 和块 I/O 的实时数据流。
随后,你通过指定容器名称或 ID 来聚焦特定容器的监控,查看它们各自的资源消耗情况。这种方法使得针对单个容器的性能分析成为可能。