为了减少在动态配置的EC2盒上的Docker映像构建时间,我决定使用以下方法: -每晚在主主机上运行“ docker-compose build” -将整个/ var / lib / docker目录从主主机克隆到新框 -在新框中运行“ docker-compose build”;如果未修改相关文件,则构建应使用缓存。 但是-实际上Docker不使用缓存。我注意到新主机上的构建过程为同一文件生成了不同的哈希值(我的意思是-对于具有相同内容的文件)。
在这篇文章https://hackernoon.com/working-with-the-docker-build-cache-to-autoscale-our-jenkins-nodes-37b63a3dd2a中,不同的mtime是docker缓存失效的解释。 但据我测试,mtime不会影响Docker构建产生的哈希值。 我缺少什么?
感谢,维塔利
我在Ubuntu 16.04上使用Docker版本18.06.1-ce和docker-compose版本1.23.1。
答案 0 :(得分:2)
我相信docker使用tarsum spec计算文件的校验和。其中包括following headers:
我将重点关注的字段包括文件名(应区分大小写),文件权限(模式),所有者(uid / gid)和大小。
还请注意,mtime字段是特定于版本的,因此,如果您最初是在较旧版本的docker上构建映像,则可以将mtime包括在计算中。