首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Docker Hub在构建镜像时不缓存自动构建存储库?

为什么Docker Hub在构建镜像时不缓存自动构建存储库?
EN

Stack Overflow用户
提问于 2014-08-03 14:32:55
回答 2查看 2.5K关注 0票数 20

注意:似乎我问题的前提不再有效,因为新的Docker Hub似乎支持缓存。我还没有亲自测试过这个。请参阅new answer below

Docker Hub的自动化构建存储库似乎不缓存图像。在构建过程中,它会删除所有中间容器。这是它想要工作的方式,还是我做错了什么?如果不需要为每一个小的改变重新构建所有的东西,那就太好了。我认为这应该是docker最好的优势之一,而他们的构建器却不使用它,这似乎很奇怪。那么为什么它不缓存图像呢?

更新:我已经开始使用Codeship构建我的应用程序,然后在我的DigitalOcean服务器上运行远程命令,以复制构建的文件并运行docker build命令。我仍然不确定为什么Docker Hub不缓存。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-01 04:27:23

免责声明:我是Quay.io的首席软件工程师,这是一个私有的Docker容器注册表,所以这是一个有根据的猜测,基于我们在我们自己的构建系统实现中所面临的相同问题。

根据我使用Dockerfile构建系统的经验,我怀疑Docker Hub不支持缓存,因为缓存是在Docker引擎中实现的。Docker构建的缓存通过将要运行的命令与在内存中找到的现有层进行比较来操作。

例如,如果Dockerfile的格式为:

代码语言:javascript
复制
FROM somebaseimage
RUN somecommand
ADD somefile somefile

然后Docker构建代码将:

  1. 检查是否存在与somebaseimage匹配的镜像
  2. 检查是否存在父镜像为上一个镜像的RUN somecommand命令的本地镜像
  3. 检查是否存在父镜像为上一个镜像的本地镜像ADD somefile somefile +<代码>D10的哈希(以确保在somefile更改时该镜像无效)

如果上述任一步骤匹配,则在Dockerfile构建过程中将跳过该命令,而使用缓存的镜像本身。然而,这个过程的一个关键问题是,它要求缓存的图像在构建机器上是的,以便查找和验证匹配。在构建节点上对每个人的映像进行将是非常低效的,这使得这个问题更难解决。

在Quay.io,我们通过创建Docker缓存代码的变体来解决缓存问题,该代码可以预先计算这些命令/散列,然后向注册表请求缓存层,只有在我们找到最有效的缓存集之后才将它们下载到机器上。这需要在我们的注册表代码中对数据模型进行重大更改。

如果您想了解更多信息,我们在此演讲中对如何做到这一点进行了技术概述:https://youtu.be/anfmeB_JzB0?list=PLlh6TqkU8kg8Ld0Zu1aRWATiqBkxseZ9g

票数 26
EN

Stack Overflow用户

发布于 2018-12-27 21:47:18

新的Docker Hub推出了一个新的自动化构建系统,支持构建缓存。

https://blog.docker.com/2018/12/the-new-docker-hub/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25102272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档