我正在使用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缓存后已更改的图层?
这是两个问题,但我希望他们有相同的答案。
答案 0 :(得分:0)
好的,如果你的意思是yourimage:latest
,那么latest
就没有任何意义,因为它只是一种惯例而不是保证你真的在拉最新的(最新的)图像。
如果您从本地加载图像yourimage:latest
,之后从注册表(yourimage:latest
)中提取相同的命名图像,则最后一个将是及时latest
。因为它与第一个不同,即使第一个是及时的新的。如果它有另一个指纹,它将被覆盖。