我的Jenkins作业中有一个运行此命令的Docker容器:
docker run --name="mydoc" reportgeneration:1.0 start=$START end=$END config=$myfile
这很好。该镜像是从DockerFile创建的,该文件正在使用
ENTRYPOINT
执行shell脚本。现在,我想知道此容器已使用了多少CPU和内存。我正在使用Jenkins作业,在“执行shell命令”中,我正在运行上述Docker run命令。
我看到了有关“docker stats”命令的信息。它在我的Ubuntu机器上运行得很好。但是我希望它通过Jenkins运行,因为我的容器是通过Jenkins控制台运行的。因此,这里遵循我的限制。
docker stats
命令。在Ubuntu命令行中,我们按“ctrl + c”将其停止。我将如何在 Jenkins 做到这一点? docker stats
的方法,一旦执行了“docker run”命令,该容器也不会处于 Activity 状态并退出。对于退出的容器,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(显然,已更新为执行有用的操作,而不仅仅是启动容器并查看其统计信息)。
但是,如果您需要/想要/想要停止一个交互式过程,则
kill
是您要查找的命令。在终端just sends a SIGINT中按Ctrl-C进入该进程。当然,您需要知道PID。我不确定Jenkins,但是如果您刚从带有
child-process &
(例如docker stats &
)的shell脚本启动了子进程,则其PID将为in the $!
variable。或者,您可以尝试使用pidof
或ps
命令来计算它,但是在并发作业的情况下这可能很容易出错(除非它们都是孤立的)。在这里,我假设您的Jenkins工作是执行实际工作的Shell脚本。如果您的设置不同(例如,如果您使用某些插件,因此Jenkins直接与Docker对话),则情况可能会有所不同并且更加复杂。
关于memory - Docker容器的CPU和内存利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43659527/