为了减少动态配置的 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 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。
我相信 docker 使用以下命令计算文件的校验和跗节规格 https://github.com/moby/moby/blob/master/pkg/tarsum/tarsum_spec.md。这包括以下标题 https://github.com/moby/moby/blob/master/pkg/tarsum/tarsum_spec.md#headers:
- '名称' - 字符串
- 'mode' - 以 10 为基数的整数字符串
- 'uid' - 整数字符串
- 'gid' - 整数字符串
- 'size' - 整数字符串
- 'mtime' (仅 Version0) - 自 1970-01-01 00:00:00 UTC 以来的秒数整数字符串
- 'typeflag' - 字符的字符串
- '链接名称' - 字符串
- 'uname' - 字符串
- 'gname' - 字符串
- 'devmajor' - 整数字符串
- 'devminor' - 整数字符串
我关注的字段包括文件名(应区分大小写)、文件权限(模式)、所有者(uid/gid)和大小。
另请注意,mtime 字段是特定于版本的,因此如果您最初在旧版本的 docker 上构建映像,则 mtime 可能包含在计算中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)