在容器的使用过程当中,若是能及时的掌握容器使用的系统资源,不管对开发仍是运维工做都是很是有益的。幸运的是 docker 本身就提供了这样的命令:docker stats。docker
docker stats 命令用来显示容器使用的系统资源。不带任何选项执行 docker stats 命令:json
$ docker stats
默认状况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。下面是输出的主要内容:
[CONTAINER]:以短格式显示容器的 ID。
[CPU %]:CPU 的使用状况。
[MEM USAGE / LIMIT]:当前使用的内存和最大可使用的内存。
[MEM %]:以百分比的形式显示内存使用状况。
[NET I/O]:网络 I/O 数据。
[BLOCK I/O]:磁盘 I/O 数据。
[PIDS]:PID 号。网络
若是不想持续的监控容器使用资源的状况,能够经过 --no-stream 选项只输出当前的状态:运维
$ docker stats --no-stream
这样输出的结果就不会变化了,看起来省劲很多。工具
若是咱们只想查看个别容器的资源使用状况,能够为 docker stats 命令显式的指定目标容器的名称或者是 ID:spa
$ docker stats --no-stream registry 1493
当有不少的容器在运行时,这样的结果看起来会清爽一些。这里的 registry 和 1493 分别是容器的名称和容器的 ID。注意,多个容器的名称或者是 ID 之间须要用空格进行分割。3d
细心的同窗可能已经发现了,第一列再也不显示默认的容器 ID,而是显示了咱们传入的容器名称和 ID。基于此,咱们能够经过简单的方式使用容器的名称替代默认输出中的容器 ID:code
$ docker stats $(docker ps --format={{.Names}})
用容器的名称替代 ID 后输出的结果是否是友好一些?orm
咱们在前面搞了点小手段把输出中的容器 ID 替换成了名称。其实 docker stats 命令支持咱们经过 --format 选项自定义输出的内容和格式:blog
$ docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
上面的命令中咱们只输出了 Name, CPUPerc 和 Memusage 三列。下面是自定义的格式中可使用的全部占位符:
.Container 根据用户指定的名称显示容器的名称或 ID。
.Name 容器名称。
.ID 容器 ID。
.CPUPerc CPU 使用率。
.MemUsage 内存使用量。
.NetIO 网络 I/O。
.BlockIO 磁盘 I/O。
.MemPerc 内存使用率。
.PIDs PID 号。
有了这些信息咱们就能够彻底按照本身的需求或者是偏好来控制 docker stats 命令输出的内容了。
除了以 table 格式输出结果,还能够经过 format 选项输出 json 格式的结果:
$ docker stats --no-stream --format \ "{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}"
经过 docker stats 命令咱们能够看到容器使用系统资源的状况。这为咱们进一步的约束容器可用资源或者是调查与资源相关的问题提供了依据。除了 docker 自带的命令,像 glances 等工具也已经支持查看容器使用的资源状况了,有兴趣的朋友能够去了解一下。