用于travis构建的Docker缓存

时间:2017-01-06 07:48:29

标签: docker travis-ci

travis上尚未提供Docker缓存:https://github.com/travis-ci/travis-ci/issues/5358

我试图通过以下方式编写解决方法:

`docker save -o file.tar $(docker history -q image_name | grep -v missing)`
`docker load -i file.tar

效果很好,给了我所有的图像层。我现在唯一的问题是节省需要很长时间,而且大部分时间我实际上都在更换一层,所以我不需要重写所有其他内容。有没有办法告诉docker save命令跳过file.tar中已有的图层?

1 个答案:

答案 0 :(得分:2)

在tar中的manifest.json文件中,您可以获得所需的信息。

tar -xOf file.tar manifest.json

检查Config键的值。前12个字符是图像ID。您可以使用上面的命令,提取您已有的图像ID,并将其排除在docker save命令中。

我对bash脚本不太满意,但这可以在我的Mac上运行

tar -xOf file.tar manifest.json | tr , '\n' | grep -o '"Config":".*"' | awk -F ':' '{print $2}' | awk '{print substr($0,2,12)}'

使用此输出所有内容

docker history -q IMAGE_HERE | grep -v missing && tar -xOf file.tar manifest.json | tr , '\n' | grep -o '"Config":".*"' | awk -F ':' '{print $2}' | awk '{print substr($0,2,12)}'

在此之后,您只需要获取唯一值。这可以通过sortuniq -u来完成,但出于某种原因,排序并不像预期的那样有效。此命令假定存在file.tar,因此也要考虑到这一点。

我在docker save命令中找不到任何关于append的内容。上述策略可以使用彼此不同的多个文件焦点。