我知道 docker 将每个图像存储在层中。如果我在一台开发服务器上有多个用户,并且每个人都运行相同的 Dockerfile,但将图像存储为user1_myapp. 并且 user2 将其存储为user2_myapp. 现在,他们再次使用相同的 Dockerfile。
问题是,如果图像是例如 100mb,两个图像每个都占用 100mb,还是共享相同的图像并且只使用 100mb 而不是 200mb?
是的,如果您满足先决条件,这两个图像将共享相同的层。Docker 层的重用与生成的图像名称无关。使用缓存层而不是创建新层的要求是:
COPY或ADD)必须相同。Docker 不知道您是否正在运行从外部更改资源(例如git clone或apt-get update)中提取的命令,这可能导致错误的缓存命中。请记住,层是不可变的,一旦创建它们就永远不会改变,只是在运行不同的构建时用具有新 ID 的不同层替换。当您运行一个容器时,它会使用一个特定于该容器的写时复制 RW 层,这允许多个容器和图像在缓存命中时指向相同的图像层。
如果您在使缓存在两个构建中匹配时遇到问题,例如导入一个大文件并且文件时间戳不匹配,请考虑创建一个包含公共文件的中间映像。然后每个项目都可以构建FROM该中间映像。
| 归档时间: |
|
| 查看次数: |
1541 次 |
| 最近记录: |