13

有什么方法可以防止将具有与现有图像相同标签的图像上传到 docker hub?我们的用例如下。

我们使用带有图像标签作为版本号的 docker-compose 文件部署到生产环境。为了支持回滚到以前的环境和幂等部署,某个标记的 docker 映像必须始终引用相同的映像。

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

我们目前有一些变通方法,其中涉及我们的构建脚本提取图像的所有版本并查看标签以检查是否不会发生覆盖等,但感觉必须有更好的方法。

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

4

2 回答 2

8

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

但是,您可以改用摘要。在注册表的新 v2 中,所有图像都有一个校验和,称为摘要。如果图像或其任何基础层发生变化,摘要也会发生变化。因此,如果您通过摘要提取,您可以绝对确定该图像的内容没有随着时间的推移而改变,并且该图像没有被篡改。

按摘要提取如下所示:

docker pull debian@sha256:f43366bc755696485050ce14e1429c481b6f0ca04505c4a3093dfdb4fafb899e

当您执行docker push.

现在,我同意通过摘要拉取有点笨拙,因此您可能希望建立一个系统来简单地跟踪摘要和标签,并可以验证图像没有更改。

将来,这种情况可能会得到改善,使用像Notary这样的工具来签署图像。此外,您可能希望查看使用标签来存储元数据,例如 git 哈希或内部版本号。

于 2015-07-24T09:22:57.653 回答
5

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

...有必要使某个标记的 docker 图像始终引用相同的图像。

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

于 2015-07-24T08:54:33.037 回答