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

标签 docker dockerhub continuous-delivery

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

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

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

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

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

最佳答案

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

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

按摘要拉取如下所示:

docker pull debian@sha256:f43366bc755696485050ce14e1429c481b6f0ca04505c4a3093dfdb4fafb899e

您应该在执行 docker push 时获得摘要。

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

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

关于docker - 如何防止 docker hub 上的 docker 镜像被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31605661/

相关文章:

linux - 权限被拒绝 : '/var/lib/pgadmin/sessions' in Docker

docker - 在 Gitlab Runner 容器中构建 Docker 镜像

flutter ||使用 Codemagic 将 Apk 和 Ipa 发送到多个电子邮件

docker - 如何代理内部 Nexus Docker 存储库?

git - Docker Hub - 未触发正则表达式匹配的自动构建标签

azure - 如何从 VSTS 连接到 Azure 应用服务

azure - 当指定分支的拉取请求完成时触发下一个管道阶段

git - 使 git 子模块独立于 super 项目使用

java - 使用 Artifactory 代理到 Docker Hub 并在防火墙内使用测试容器进行测试

Docker hub 自动构建依赖于另一个 docker hub repo