几个月前,我决定使用以下命令设置我的项目构建 docker 镜像的 CIno-cache
flag:我认为最好不要冒险让 docker 使用旧的缓存层。
我现在才意识到,我的图像各层的 sha 总是不同的(即使新构建的图像应该生成与之前构建的相同的层),并且每当我拉动新构建的图像时,所有层总是从零下载。
我现在认为问题是--no-cache
标志,我知道这听起来很明显,但说实话,我认为--no-cache
只是执行速度较慢,而且还认为它是以功能方式实现的(相同命令+相同内容=相同层)。
有人可以确认--no-cache
标志是问题吗?
容器的问题是,实际上,你永远不会用相同的 sha 构建相同的层。如果您使用之前构建的同一层,则只能拥有相同的 sha。
这样想:每次构建一个层时,至少会有一个日志文件、一个时间戳、一些不同的东西——然后我们还没有提到引入外部依赖项。
--no-cache 标志将简单地阻止 Docker 引擎使用缓存层,并且它将再次下载和构建所有内容。因此,该标志确实是散列不同的(间接)原因,但这是预期的行为。从缓存构建意味着您的构建速度会更快,但会重用以前构建的层,因此具有相同的 sha(这可能会导致重用以前的过时结果等,这就是我们拥有该标志的原因)。
请查看这篇文章以获取更多信息:https://thenewstack.io/understanding-the-docker-cache-for-faster-builds/ https://thenewstack.io/understanding-the-docker-cache-for-faster-builds/
如果您希望保证某些层具有相同的 sha 但仍不想使用缓存,您可能需要研究多阶段 Docker 构建:https://docs.docker.com/develop/develop-images/multistage-build/ https://docs.docker.com/develop/develop-images/multistage-build/
这样,您就可以拥有一个固定的基础镜像,并在此基础上构建其他所有内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)