gpt4 book ai didi

Docker 缓存,它是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 19:29:42 30 4
gpt4 key购买 nike

我知道 docker 用图层存储每个图像。如果我在一台开发服务器上有多个用户,并且每个人都在运行相同的 Dockerfile,但将镜像存储为 user1_myapp . user2 将其存储为 user2_myapp .现在,他们再次使用相同的 Dockerfile。

问题是,如果图像是例如 100mb,那么两个图像每个都占用 100mb,还是它们共享相同的图像并且只使用 100mb 而不是 200mb?

最佳答案

是的,如果您满足先决条件,这两个图像将共享相同的层。 Docker 层的重用与生成的图像名称无关。使用缓存层而不是创建新层的要求是:

  • 构建命令需要在前一个图像缓存所在的同一 docker 主机上运行。
  • 前一层 ID 必须在缓存层和正在运行的构建步骤之间匹配。
  • 当前正在运行的命令,或源上下文(如果您正在运行 COPY)或 ADD , 必须相同。 Docker 不知道您是否正在运行从外部更改资源中提取的命令(例如 git cloneapt-get update ),这可能导致错误的缓存命中。
  • 您不能在构建命令中禁用缓存。

  • 请记住,图层是不可变的,一旦创建它们就永远不会更改,只是在您运行不同的构建时替换为具有新 ID 的不同图层。当你运行一个容器时,它使用一个特定于该容器的写时复制 RW 层,它允许多个容器和图像在缓存命中时指向相同的图像层。

    如果您在使缓存在两个版本中匹配时遇到问题,例如导入一个大文件并且文件时间戳之类的内容不匹配,请考虑创建一个包含公共(public)文件的中间图像。然后每个项目都可以建 FROM那个中间图像。

    关于Docker 缓存,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45238429/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com