我正在使用 Gitlab-CI 在 docker-in-docker 映像中构建一些 Docker 映像。这很重要,因为每个构建都使用一个带有空 Docker 缓存的新 docker-in-docker 环境。可以在 Gitlab 中缓存缓存并稍后恢复,但这似乎并不安全——网上有人这样做了——但这似乎并不安全。
我在 Nexus 中有一个 Docker 注册表,我已成功用于拉取和推送。
我还设置了将图像保存到 Gitlab-ci 的缓存中docker save并使用docker load.
通过从注册表中提取或从 Gitlab-CI 缓存加载,我可以运行docker build --cache-from ...,Docker 将逐步构建,而不是重建任何未更改的图像层。
所有构建的图像都获得latest标签。
不起作用的部分是:如果我从 Gitlab-CI 缓存加载图像,然后从注册表中提取,则注册表中的图像始终用作 Docker 的观点,即使是几周比从缓存中加载的旧。这似乎是有缺陷的行为——至少可以说,据我所知,这是非常出乎意料且没有记录的。
我如何告诉 Docker:1)使用最新的作为最新的(没有latest标签的替代方案是可能的),以及 2)只下载自加载到 Docker 缓存中的内容后发生更改的层?
这是两个问题,但我希望他们有相同的答案。