如何仅在需要时从 Docker 注册表中提取,或者 "latest" 这个词是什么意思?
How do I pull from a Docker registry only when required, or what does the word "latest" even mean?
我正在使用 Gitlab-CI 在 docker-in-docker 图像中构建一些 Docker 图像。这很重要,因为每个构建都使用一个新的 docker-in-docker 环境和一个空的 Docker 缓存。可以在 Gitlab 中缓存缓存并在以后恢复它,但这似乎并不安全——网上有人这样做了——但那似乎并不安全。
我在 Nexus 中有一个 Docker 注册表,我已成功用于拉取和推送。
我还设置了使用 docker save
将图像保存到 Gitlab-ci 的缓存中并使用 docker load
.
从缓存中加载
从注册表中提取 或从 Gitlab-CI 缓存中加载 ,然后我可以 运行 docker build --cache-from ...
和 Docker 将逐步构建,不会重建任何未更改的图像层。
所有构建的图像都获得 latest
标签。
不起作用的部分是:如果我从 Gitlab-CI 缓存加载图像,然后从注册表中拉取,注册表中的图像是 always 用作来自 Docker 的观点,即使它比从缓存加载的那个早几周。这似乎是有缺陷的行为——至少可以说,据我所知,这是非常出乎意料且没有记录的。
我怎样才能告诉 Docker :
1)使用最新的作为最新的(没有 latest
标签的替代方案是可能的),并且
2) 仅下载自加载到 Docker 的缓存后发生变化的图层?
这是 2 个问题,但我希望他们有相同的答案。
好的,如果你的意思是yourimage:latest
,那么latest
没有任何意义,因为它只是一个约定,并不能保证你真的拉到了字面上最新(最新)的图像。
如果您从本地加载图像 yourimage:latest
,然后从注册表 (yourimage:latest
) 中拉取同名图像,最后一个将是及时的 latest
。因为它与第一个不同,即使第一个是及时更新的。如果它有另一个指纹,它将被覆盖。
我正在使用 Gitlab-CI 在 docker-in-docker 图像中构建一些 Docker 图像。这很重要,因为每个构建都使用一个新的 docker-in-docker 环境和一个空的 Docker 缓存。可以在 Gitlab 中缓存缓存并在以后恢复它,但这似乎并不安全——网上有人这样做了——但那似乎并不安全。
我在 Nexus 中有一个 Docker 注册表,我已成功用于拉取和推送。
我还设置了使用 docker save
将图像保存到 Gitlab-ci 的缓存中并使用 docker load
.
从注册表中提取 或从 Gitlab-CI 缓存中加载 ,然后我可以 运行 docker build --cache-from ...
和 Docker 将逐步构建,不会重建任何未更改的图像层。
所有构建的图像都获得 latest
标签。
不起作用的部分是:如果我从 Gitlab-CI 缓存加载图像,然后从注册表中拉取,注册表中的图像是 always 用作来自 Docker 的观点,即使它比从缓存加载的那个早几周。这似乎是有缺陷的行为——至少可以说,据我所知,这是非常出乎意料且没有记录的。
我怎样才能告诉 Docker :
1)使用最新的作为最新的(没有 latest
标签的替代方案是可能的),并且
2) 仅下载自加载到 Docker 的缓存后发生变化的图层?
这是 2 个问题,但我希望他们有相同的答案。
好的,如果你的意思是yourimage:latest
,那么latest
没有任何意义,因为它只是一个约定,并不能保证你真的拉到了字面上最新(最新)的图像。
如果您从本地加载图像 yourimage:latest
,然后从注册表 (yourimage:latest
) 中拉取同名图像,最后一个将是及时的 latest
。因为它与第一个不同,即使第一个是及时更新的。如果它有另一个指纹,它将被覆盖。