如何仅在需要时从Docker注册表中提取,或者“最新”这个词甚至意味着什么?

时间:2017-10-30 17:41:25

标签: docker docker-in-docker

我正在使用Gitlab-CI在Docker-in-docker镜像中构建一些Docker镜像。这很重要,因为每个构建都使用具有空Docker缓存的新docker-in-docker环境。可以在Gitlab中缓存缓存并在以后恢复它,但这似乎并不安全 - 网络上有人这样做 - 但这似乎并不安全。

我在Nexus中有一个Docker注册表,我已成功用于拉动和推送。

我还设置了使用docker save将图像保存到Gitlab-ci的缓存中,并使用docker load从缓存加载。

通过从Gitlab-CI缓存中加载注册表,我可以运行docker build --cache-from ...并且Docker将逐步构建,而不是重建任何未更改的图像层

所有构建的图片都会获得latest标记。

不起作用的部分是这样的:如果我从Gitlab-CI缓存加载图像,然后从注册表中拉出,注册表中的图像始终用作来自Docker的点视图,即使它比从缓存加载的数周大。这似乎是有缺陷的行为 - 至少可以说,就我所知,这是非常意外和无证的。

如何告诉Docker: 1)使用最新的最新版本(没有latest标签的替代品是可能的),和 2)只下载自加载到Docker缓存后已更改的图层?

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

1 个答案:

答案 0 :(得分:0)

好的,如果你的意思是yourimage:latest,那么latest就没有任何意义,因为它只是一种惯例而不是保证你真的在拉最新的(最新的)图像。

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