我的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控制台运行。所以遵循我的限制。
docker stats
命令。在Ubuntu命令行中,我们点击'ctrl + c'来停止它。我将如何在詹金斯做到这一点?docker stats
的方法,一旦执行'docker run'命令,容器将不会处于活动状态并将退出。对于退出的容器,CPU和内存利用率将为零。docker run 'image'
docker stats container id/name
使用上面两行,docker stats
命令只会获得一个退出的容器,我认为docker stats
甚至不能使用Jenkins控制台,因为它无法停止。
有没有什么方法可以通过Jenkins控制台以更好的方式获得容器的资源利用率(CPU,内存)?
答案 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。或者您可以尝试使用pidof
或ps
命令来计算它,但是在并发作业的情况下这可能容易出错(除非它们全部被隔离)。
这里我假设您的Jenkins作业是执行实际工作的shell脚本。如果您的设置不同(例如,如果您使用某些插件,以便Jenkins直接与Docker交谈),事情可能会有所不同,也会更复杂。