Docker容器CPU和内存利用率

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

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

这工作得很好。 该图像是从一个DockerFile创build的,该DockerFile执行一个带有ENTRYPOINT的shell脚本。

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

我看到了“docker统计”的命令。 它在我的Ubuntu机器上工作得很好。 但我希望它通过Jenkins运行,因为我的容器通过Jenkins控制台运行。 所以这里有我的限制。

  1. 我不知道是否有任何方法来停止docker stats命令。 在Ubuntu命令行中,我们点击“ctrl + c”来停止它。 jenkins怎么做?
  2. 即使我想出docker stats的方法,一旦“docker运行”命令被执行,容器将不会被激活并退出。 对于退出的容器,CPU和内存使用率将为零。
 docker run 'image' docker stats container id/name 

有了上面这两行, docker stats命令将只能得到一个退出的容器,我不认为docker stats甚至不能在Jenkins控制台上工作,因为它不能被停止。

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

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

这个条件检查容器是否运行 , docker stats --no-stream打印stats一次然后退出,这使得它适合于非交互式的使用。

我相信你可以使用这样的shell脚本文件的变体(显然,更新来做一些有用的事情,而不是仅仅启动容器并观察其统计) 作为构build步骤 。


但是如果你需要/想要/有一个你想要停止的交互式进程, kill就是你正在寻找的命令。 terminal中的Ctrl-C 只是发送一个SIGINT给进程。

当然,你需要知道一个PID。 我不确定Jenkins,但是如果你刚从一个带有subprocess的shell脚本(例如docker stats & )开始了一个subprocess,那么它的PID将在$! variables 。 或者你可以尝试使用pidofps命令来计算它,但在并发作业的情况下可能会出错(除非它们全部是孤立的)。

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