Docker 容器 CPU 和内存利用率

Docker container CPU and Memory Utilization

我有一个 Docker 容器 运行 我的 Jenkins 作业中有这个命令:

docker run --name="mydoc" reportgeneration:1.0 start=$START end=$END config=$myfile

这个效果很好。该图像是从 Docker 文件创建的,该文件正在使用 ENTRYPOINT.

执行 shell 脚本

现在我想知道这个容器使用了多少 CPU 和内存。我正在使用 Jenkins 作业,在 "execute shell command" 中,我正在 运行 上面的 Docker 运行 命令。

我看到了关于 'docker stats' 命令。它在我的 Ubuntu 机器上运行良好。但我希望它通过 Jenkins 运行,因为我的容器是通过 Jenkins 控制台 运行ning。所以这里遵循我的限制。

  1. 不知道有没有办法停止docker stats命令。在 Ubuntu 命令行中,我们点击 'ctrl+c' 来停止它。我将如何在 Jenkins 中完成?
  2. 即使我想出停止 docker stats 的方法,一旦执行 'docker run' 命令,容器将不会处于活动状态并会退出。对于退出的容器,CPU 和内存利用率将为零。
docker run 'image' 

docker stats container id/name

通过以上两行,docker stats 命令只会得到一个退出的容器,我认为 docker stats 甚至无法与 Jenkins 控制台一起使用,因为它无法停止。

有什么方法可以通过 Jenkins 控制台更好地获取容器的资源利用率(CPU、内存)?

建议不要 运行 docker stats 交互,而是使用一段 shell 脚本,循环如下:

#!/bin/sh

# First, start the container
CONTAINER_ID=$(docker run -d ...)

# Then start watching that it's running (with inspect)
while [ "$(docker inspect -f {{.State.Running}} $CONTAINER_ID 2>/dev/null)" = "true" ]; do
    # And while it's running, check stats
    docker stats --no-stream $CONTAINER_ID
    sleep 1
done

# When the script reaches this point, the container had stopped.
# For example, let's clean it up (assuming you haven't used --rm in run).
docker rm $CONTAINER_ID

条件checks whenever the container is running与否,docker stats --no-stream打印一次统计数据后退出,适合非交互使用。

我相信您可以使用此类 shell 脚本文件的变体(显然,已更新以做一些有用的事情,而不是仅仅启动容器并查看其统计信息)as a build step.


但是如果您 need/want/have 一个您想停止的交互式进程,kill 就是您正在寻找的命令。终端中的 Ctrl-C just sends a SIGINT 到进程。

当然,您需要知道 PID。我不确定 Jenkins,但是如果您刚刚从 shell 脚本中使用 child-process &(例如 docker stats &)启动子进程,那么它的 PID 将是 in the $! variable.或者您可以尝试使用 pidofps 命令来计算它,但是在并发作业的情况下这可能容易出错(除非它们都是孤立的)。

这里我假设您的 Jenkins 作业是执行实际工作的 shell 脚本。如果您的设置不同(例如,如果您使用一些插件,那么 Jenkins 直接与 Docker 对话),事情可能会有所不同并且更加复杂。