命令:

docker container stats

描述:

显示容器资源使用的状态(实时)

用法:

docker container stats [OPTIONS] [CONTAINER...]

别名:

docker stats(docker的一些命令可以简写,docker stats就等同于docker container stats)

stats到底可以显示什么,我们先来看看运行效果如何再来说话。

docker stats

可以看到不加任何选项,stats会实时显示出所有运行中的容器状态。ctrl+c可以退出。

docker 指定cpu最大占用_学习

这是在我的华为云上运行的两个应用,wordpress和mysql,从列名上可以看出,stats会依次显示CONTAINER ID、NAME、CPU %、MEM USAGE / LIMIT、MEM %、NET I/O、BLOCK I/O和PIDS。

名词解释

列名

描述

CONTAINER ID 和NAME

容器ID和名称

CPU %和MEM %

容器正在使用的宿主机CPU和内存的百分比。

MEM USAGE / LIMIT

容器正在使用的总内存,以及它被允许使用的总内存量。

NET I/O

容器通过其网络接口接收和发送的数据量。

BLOCK I/O

容器在宿主机上的块设备上写入和读取的数据量。

PIDs

容器创建的进程或线程数

选项OPTIONS

我们再来看看stats都有哪些选项

选项

描述

-a,--all

显示所有容器状态(不加这个选项只显示正在运行中的容器)

--format

使用自定义模板格式化输出:

‘table’:以表格格式打印输出,包含列标题(默认) 

‘table TEMPLATE’:使用给定的Go模板以表格格式打印输出 

‘json’:以JSON格式打印 ‘TEMPLATE’:使用给定的Go模板打印输出。

--no-stream

禁用实时数据流,相当于对容器状态进行一次截图

--no-trunc

不进行截断输出

对于选项,我们一个个进行实战操作,从实战中了解stats选项的用法。

-a,--all

显示所有容器状态(不加这个选项只显示正在运行中的容器)。

下面是我阿里云上所有的容器。其中redis是运行状态,另两个ubuntu是退出状态。

docker 指定cpu最大占用_docker 指定cpu最大占用_02

执行命令

docker stats --all

可以看到,运行中的redis实时显示CPU,内存等占比,而ubuntu占比都是0。

docker 指定cpu最大占用_docker 指定cpu最大占用_03

--format

使用自定义模板格式化输出:
‘table’:以表格格式打印输出,包含列标题(默认) 
‘table TEMPLATE’:使用给定的Go模板以表格格式打印输出 
‘json’:以JSON格式打印 ‘TEMPLATE’:使用给定的Go模板打印输出。

下面只查看单独运行的容器my-redis,使用json的格式输出

docker stats --format json my-redis

可以看出,终端实时显示容器运行状态,但是以json格式输出的。结果如下:

docker 指定cpu最大占用_docker 指定cpu最大占用_04

另外,我们还可以自定义控制输出。下表是格式占位符

占位符

描述

.Container

容器名称或ID

.Name

容器名称

.ID

容器ID

.CPUPerc

CPU百分比

.MemUsage

内存使用情况

.NetIO

网络IO

.BlockIO

块IO

.MemPerc

内存百分比(不适用于windows)

.PIDs

进程数(不适用于windows)

因为docker的底层是Go语言,因此它的格式也支持Go模板的格式。

比如我们想只查看容器、CPU和内存百分比,我们可以这样设置:

docker stats --format "table {{.Name}}/t{{.CPUPerc}/t{{.MemPerc}}}"

结果如下图所示:

docker 指定cpu最大占用_docker 指定cpu最大占用_05

备注:上述table如果不输入,将不会显示标题栏,排版也不成样子了。会是如下样子:

docker 指定cpu最大占用_运维_06

--no-stream

禁用实时数据流,相当于对容器状态进行一次截图,只显示当前时刻容器运行时的状态。

还是先上命令

docker stats --no-stream

结果如下。状态信息不再实时显示,直接回到终端输入。

docker 指定cpu最大占用_学习_07

--no-trunc

不进行截断输出。

一些信息,为了美观,默认会进行截断,比如CONTAINER ID列,使用这个命令可以将信息全部输出,不截断。

docker stats --no-trunc

可以看到,容器ID列,输出了全部容器ID。

docker 指定cpu最大占用_运维_08