0

我正在使用 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 缓存中的内容后发生更改的层?

这是两个问题,但我希望他们有相同的答案。

4

1 回答 1

1

好吧,如果你的意思是yourimage:latest,那latest意味着什么,因为它只是一个约定,并不能保证你真的在拉最新的(最新的)图像。

如果您从本地加载图像yourimage:latest,然后从注册表中提取相同的命名图像(yourimage:latest),最后一个将是及时的latest。因为它与第一个不同,即使第一个是及时更新的。如果它有另一个指纹,它将被覆盖。

于 2017-10-30T18:29:39.780 回答