我知道docker会为每个图像存储图层。如果我在一个开发服务器上有多个用户,并且每个人都运行相同的Dockerfile,但将图像存储为user1_myapp
。 user2将其存储为user2_myapp
。现在,他们再次使用相同的Dockerfile。
问题是,如果图像是例如100mb,那么两个图像都是每个100mb,或者它们是否共享相同的图像并且仅使用100mb而不是200mb?
答案 0 :(得分:4)
是的,如果您满足先决条件,这两个图像将共享相同的图层。 Docker图层可以独立于生成的图像名称重复使用。使用缓存层而不是创建新层的要求是:
COPY
或ADD
,则源上下文必须相同。 Docker不知道您是否正在运行从外部更改资源(例如git clone
或apt-get update
)获取的命令,这可能导致虚假缓存命中。请记住,图层是不可变的,一旦创建,它们永远不会被更改,只是在运行不同版本时用不同的图层替换为新ID。当您运行容器时,它使用特定于该容器的写时复制RW层,这允许多个容器和图像在获得缓存命中时指向相同的图像层。
如果您在使用两个版本中的缓存匹配时遇到问题,例如导入大文件和类似文件时间戳的内容不匹配,请考虑创建包含公共文件的中间图像。然后每个项目都可以构建FROM
该中间图像。