当我的图像的基础图像更新时会发生什么?

What happens when the base image of my image gets updated?

我有基于 microsoft/aspnet:4.6.2 的图像,当构建这些(我的)图像时,microsoft/aspnet:4.6.2 被拉下以构建我自己的图像。因此,在我的本地计算机中,我有 microsoft/aspnet:4.6.2 图像。假设基础映像已更新,Microsoft 发现该映像存在错误并决定修复以维护该标签,因此它仍被称为 microsoft/aspnet:4.6.2,但它实际上与我构建自己的映像时不同。

所以我有两个问题:
1. 每次我的镜像被拉下来,它都会得到我构建镜像时的基础镜像,对吧? (这似乎很明显,但我需要检查)
2. 如果我注意到(网络挂钩、触发器?)有更新版本的 microsoft/aspnet:4.6.2,我可以再次 运行 命令 docker build 并且更新的图像会被拉下吗?请记住,旧的基础映像在我的文件系统中(名称相同)。 Docker 是否足够聪明,可以意识到我有该基础映像的旧版本并且会下载它的最新版本?

希望我说清楚了

别人下载的您的图像将始终保持不变。图像依赖于特定的 layers 来为图像提供 SHA256 校验和。修改父层会修改用于引用图像的校验和,从而成为新图像。更改该图像的唯一方法是,如果图像被标记引用并且本地标记发生更改,可以手动更改,也可以通过再次拉取图像标记。

docker build默认会优先使用本地图片。您需要 运行 docker build --pull,分别 docker pulldocker rmi IMAGE 才能使构建使用最新的标记图像。

Docker Hub build service has a build 功能可在中心更新任何指定图像时自动重建。

  1. 是的。 (在内部它使用 IMAGE ID,而不是名称来引用基本图像)
  2. IIRC 默认不智能。 (在 docker build 中有一个 --pull 开关)

如果您需要最新发布的基础映像,请在 docker 构建期间使用 —no-cache 选项,否则 docker 将始终使用本地可用的映像,除非您进行清理 post docker建造