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
中已有的图层?
答案 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)}'
在此之后,您只需要获取唯一值。这可以通过sort
和uniq -u
来完成,但出于某种原因,排序并不像预期的那样有效。此命令假定存在file.tar
,因此也要考虑到这一点。
我在docker save命令中找不到任何关于append的内容。上述策略可以使用彼此不同的多个文件焦点。