介绍
在本实验中,你将学习如何使用 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。
按名称或 ID 显示特定容器的实时资源使用情况
在上一步中,你已学会如何显示所有运行中容器的资源使用情况。本步骤将教你如何通过向 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 来聚焦特定容器的监控,查看它们各自的资源消耗情况。这种方法使得针对单个容器的性能分析成为可能。



