测量Docker容器的执行时间

mat*_*sbe 4 time docker docker-container

我有一个名为docker的镜像my_image,它启动命令并关闭。

使用命令在容器中运行映像时docker run --rm my_image,是否可以测量容器的执行时间?

编辑:

容器执行后,我需要查看这些计时信息,因此无法使用time命令。

我以某种方式希望找到由docker保留的一些容器执行历史,即使--rm使用过也是如此。但是,如果它不存在,那么@tgogos的答案是合适的。

目的是比较几个图像的执行时间,以得出关于所使用的不同工具的结论。

tgo*_*gos 5

第一种方法: time

time docker run --rm --name=test alpine ping -c 10 8.8.8.8
...

real    0m10.261s
user    0m0.228s
sys 0m0.044s
Run Code Online (Sandbox Code Playgroud)

但这还包括创建删除容器的时间。

第二种方法:容器信息

您要查找的信息由docker存储,可以通过进行访问docker container inspect

docker run --name=test alpine ping -c 10 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

*请注意,我没有使用过,--rm因为下一步是检查容器。之后,您将必须删除它。您可能感兴趣的时间戳是:

  • "Created": "2018-08-02T10:16:48.59705963Z",
  • "StartedAt": "2018-08-02T10:16:49.187187456Z",
  • "FinishedAt": "2018-08-02T10:16:58.27795818Z"

$ docker container inspect test

[
    {
        "Id": "96e469fdb437814817ee2e9ad2fcdbf468a88694fcc998339edd424f9689f71f",
        "Created": "2018-08-02T10:16:48.59705963Z",
        "Path": "ping",
        "Args": [
            "-c",
            "10",
            "8.8.8.8"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-08-02T10:16:49.187187456Z",
            "FinishedAt": "2018-08-02T10:16:58.27795818Z"
        }
...
Run Code Online (Sandbox Code Playgroud)

持续时间计算示例(使用bash):

您可以使用以下单个命令将这些时间戳记放入bash变量中:

START=$(docker inspect --format='{{.State.StartedAt}}' test)
STOP=$(docker inspect --format='{{.State.FinishedAt}}' test)
Run Code Online (Sandbox Code Playgroud)

然后,您可以将它们转换为UNIX纪元时间戳(自1970年1月1日以来的秒数。(UTC))

START_TIMESTAMP=$(date --date=$START +%s)
STOP_TIMESTAMP=$(date --date=$STOP +%s)
Run Code Online (Sandbox Code Playgroud)

如果减去这两个,则持续时间以秒为单位...

echo $(($STOP_TIMESTAMP-$START_TIMESTAMP)) seconds
9 seconds
Run Code Online (Sandbox Code Playgroud)