Docker容器CPU和内存利用率

时间:2017-04-27 13:37:12

标签: memory docker jenkins cpu

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

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

这非常有效。该图像是从DockerFile创建的,它正在执行带有ENTRYPOINT的shell脚本。

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

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

  1. 我不知道是否有办法停止docker stats命令。在Ubuntu命令行中,我们点击'ctrl + c'来停止它。我将如何在詹金斯做到这一点?
  2. 即使我找到了停止docker stats的方法,一旦执行'docker run'命令,容器将不会处于活动状态并将退出。对于退出的容器,CPU和内存利用率将为零。
  3. docker run 'image' 
    
    docker stats container id/name
    

    使用上面两行,docker stats命令只会获得一个退出的容器,我认为docker stats甚至不能使用Jenkins控制台,因为它无法停止。

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

1 个答案:

答案 0 :(得分:3)

建议不要以交互方式运行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

但是,如果您需要/希望/想要停止的交互式流程,kill是您正在寻找的命令。 Ctrl-C在进程的终端just sends a SIGINT中。

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

这里我假设您的Jenkins作业是执行实际工作的shell脚本。如果您的设置不同(例如,如果您使用某些插件,以便Jenkins直接与Docker交谈),事情可能会有所不同,也会更复杂。

相关问题