如何测量Docker构建步骤的持续时间?

如何测量Docker构建步骤的持续时间?,docker,dockerfile,Docker,Dockerfile,是否可以将Docker配置为输出构建Dockerfile的时间 我们运行一个中等规模的开发团队,希望收集开发人员开发容器的平均构建时间的统计数据 理想情况下,它应该测量单个步骤的持续时间。您可以使用工具time来测量构建时间。例如 time docker build . 对于单个构建步骤,它变得越来越困难。您可以在每个步骤后添加RUN date命令,但这将为图像添加另一层。因此它变得有点混乱。您可以使用工具time来测量构建时间。例如 time docker build . 对于单个构建步骤

是否可以将Docker配置为输出构建Dockerfile的时间

我们运行一个中等规模的开发团队,希望收集开发人员开发容器的平均构建时间的统计数据


理想情况下,它应该测量单个步骤的持续时间。

您可以使用工具
time
来测量构建时间。例如

time docker build .

对于单个构建步骤,它变得越来越困难。您可以在每个步骤后添加
RUN date
命令,但这将为图像添加另一层。因此它变得有点混乱。

您可以使用工具
time
来测量构建时间。例如

time docker build .

对于单个构建步骤,它变得越来越困难。您可以在每个步骤后添加
RUN date
命令,但这将为图像添加另一层。所以它变得有点乱了。

我也在想。我为每个步骤想出的唯一解决方案是将
date+'%F%T'
放在每个步骤的末尾

RUN set -x && apt-get update && date +'%F %T'
RUN apt-get install -y vim && date +'Time: %F %T'
输出:

Get:1 http://security.debian.org stretch/updates InRelease [63.0 kB]
...
Time: 2018-03-08 00:42:41

在Bash中,您可以使用
echo$SECONDS
,它给出自Bash会话启动以来的时间;或者
time(…)
(一个子shell),但是Docker构建环境在
sh
中运行,而不是
bash
,我也很奇怪。我为每个步骤想出的唯一解决方案是将
date+'%F%T'
放在每个步骤的末尾

RUN set -x && apt-get update && date +'%F %T'
RUN apt-get install -y vim && date +'Time: %F %T'
输出:

Get:1 http://security.debian.org stretch/updates InRelease [63.0 kB]
...
Time: 2018-03-08 00:42:41

在Bash中,您可以使用
echo$SECONDS
,它给出自Bash会话启动以来的时间;或者
time(…)
(一个子shell),但是Docker构建环境在
sh
中运行,而不是
bash
,我也遇到过同样的问题,有一个名为ts的命令行实用程序来处理该问题(部分):


我也遇到过同样的问题,有一个名为ts的命令行实用程序处理该问题(部分):

时间整体构建
time docker构建。
构建的时间步骤
docker构建读行时;做回显“$(日期)|$行”;完成;
输出
2018年9月5日星期三19:12:22英国夏令时|向Docker守护程序发送构建上下文27.65kB
2018年9月5日星期三英国夏令时19:12:22 |步骤1/19:从centos开始:centos7
2018年9月5日星期三19:12:22英国夏令时-->49f7960eb7e4
...
您可以通过只输出“步骤?/?:”行来改进结果,如下所示:

docker build . | grep "^Step" | while read line ; do echo "$(date +%s)| $line"; done;
输出
1536171476 |步骤1/19:从centos:centos7开始
1536171476 |步骤2/19:环境术语xterm
1536171476 |步骤3/19:运行***省略***
1536171476 |步骤4/19:运行***省略***
1536171476 |步骤5/19:副本***省略***
1536171476 |步骤6/19:运行***省略***
1536171476 |步骤7/19:副本***省略***
JSON输出 如果希望在CI/CD管道中运行,或者添加到开发人员工具中,可以将其制作成脚本

#/bin/bash
#脚本:time-docker-build.sh
#
#所有命令行参数都传递给docker build命令。
#
#用法:./time-docker-build.sh
#
日期\格式=“+%s”
(
#输出起始线
echo“$(日期$date_格式)|-0-开始”
docker build$*。|\
grep“^Step”|\
读行时;
做
#以日期为前缀的输出生成输出
回显“$(日期$date_格式)|$line”;
完成;
#输出端线
echo“$(日期$date_格式)|-1-结束”
) | (
#生成JSON数组输出。
#-开始是步骤:0
#-结束是步骤:-1
回声“[”
首次运行=真
读行时;
做
[[-z“$FIRST_RUN”]&&echo“,”如果不是第一行,则打印','
lineArray=($line)
time=“${lineArray[0]}”第0步
步骤=“${lineArray[3]}”#步骤是第二步
cmd=“${lineArray[@]:5}”#cmd表示第5次之后的所有内容
stepNum=${step/\/*/}
escapedCmd=“${cmd/\”/\\\“}”\35;转义所有双引号“
回声“{”
回显“\“time\:$time,”
回显“\”步骤\:$stepNum,“
回显“\”cmd\:\“$escapedCmd\”
echo-n“}”
取消第一次运行
完成
回声
回声“]”
)
输出
bash-3.2$./time-docker-build.sh
[
{
“时间”:1536174052,
“步骤”:0,
“cmd”:“开始”
},
{
“时间”:1536174052,
"步骤":一,,
“cmd”:“来自centos:centos7”
},
{
“时间”:1536174052,
"步骤":二,,
“cmd”:“环境术语xterm”
},
脚本在此处作为要点提供:

整个构建的时间
time docker构建。
构建的时间步骤
docker build.|读取行时,执行echo“$(日期)|$line”完成;
输出
2018年9月5日星期三19:12:22英国夏令时|向Docker守护程序发送构建上下文27.65kB
2018年9月5日星期三英国夏令时19:12:22 |步骤1/19:从centos开始:centos7
2018年9月5日星期三19:12:22英国夏令时-->49f7960eb7e4
...
您可以通过只输出“步骤?/?:”行来改进结果,如下所示:

docker build . | grep "^Step" | while read line ; do echo "$(date +%s)| $line"; done;
输出
1536171476 |步骤1/19:从centos:centos7开始
1536171476 |步骤2/19:环境术语xterm
1536171476 |步骤3/19:运行***省略***
1536171476 |步骤4/19:运行***省略***
1536171476 |步骤5/19:副本***省略***
1536171476 |步骤6/19:运行***省略***
1536171476 |步骤7/19:副本***省略***
JSON输出 如果希望在CI/CD管道中运行,或者添加到开发人员工具中,可以将其制作成脚本

!/bin/bash
#脚本:time-docker-build.sh
#
#所有命令行参数都传递给docker build命令。
#
#用法:./time-docker-build.sh
#
日期\格式=“+%s”
(
#输出起始线
echo“$(日期$date_格式)|-0-开始”
docker build$*。|\
grep“^Step”|\
读行时;
做
#以日期为前缀的输出生成输出
回显“$(日期$date_格式)|$line”;
完成;
#输出端线
echo“$(日期$date_格式)|-1-结束”
) | (
#生成JSON数组输出。
#-开始是步骤:0
#-结束是步骤:-1
回声“[”
首次运行=真
读行时;