如何防止docker hub上的docker镜像被覆盖?

Rus*_*ell 6 continuous-delivery docker dockerhub

有没有办法阻止图像上传到docker hub与现有图像相同的标签?我们的用例如下.

我们使用docker-compose文件部署到生产环境,并将图像标记作为版本号.为了支持回滚到先前的环境和幂等部署,必须使某个标记的泊坞窗图像始终引用相同的图像.

但是,docker hub允许使用与现有图像相同的标签上载图像(它们覆盖旧图像).这完全打破了对图像进行版本控制的想法.

我们目前有一些解决方法,包括我们的构建脚本拉动图像的所有版本,并查看标签以检查覆盖不会发生等等,但感觉必须有更好的方法.

如果docker hub不支持这个,有没有办法在没有docker hub的情况下进行docker部署?

h3n*_*rik 5

假设您有一个本地构建系统来构建 Docker 映像:您可以在标签中包含本地构建作业的构建号。这样您就可以保证您的要求:

...某个标记的 docker 镜像必须始终引用相同的镜像。

当您的本地构建自动推送到 docker hub 时,可以确保每次推送都会推送带有唯一标签的镜像。


Adr*_*uat 5

标签系统无法防止图像被覆盖; 你必须提出自己的流程来处理这个问题(而h3nrik的答案就是一个例子).

但是,您可以使用摘要.在注册表的新v2中,所有图像都被赋予校验和,称为摘要.如果图像或其任何基础层发生变化,摘要将发生变化.因此,如果您通过摘要拉取,您可以绝对确定该图像的内容未随时间变化并且图像未被篡改.

通过摘要拉取看起来像:

docker pull debian@sha256:f43366bc755696485050ce14e1429c481b6f0ca04505c4a3093dfdb4fafb899e
Run Code Online (Sandbox Code Playgroud)

你做的时候应该得到摘要docker push.

现在,我同意通过摘要拉动有点笨拙,所以你可能想要建立一个简单跟踪摘要和标签的系统,并且可以验证图像没有改变.

在未来,这种情况可能改善,像工具公证签署图像.此外,您可能希望使用标签来存储元数据,例如git hash或内部版本号.