如何防止 docker 集线器上的 docker 图片被覆盖?
How to prevent docker images on docker hub from being overwritten?
有什么方法可以防止使用与现有图片相同的标签将图片上传到 docker 中心?我们的用例如下。
我们使用 docker-compose 文件将图像标签作为版本号部署到生产环境。为了支持回滚到以前的环境和幂等部署,某个标记的 docker 图像必须始终引用相同的图像。
但是,docker 中心允许使用与现有图像相同的标签上传图像(它们会覆盖旧图像)。这完全打破了对图像进行版本控制的想法。
我们目前有变通办法,其中涉及我们的构建脚本提取图像的所有版本并查看标签以检查是否不会发生覆盖等。但感觉必须有更好的方法。
如果 docker 集线器不支持此功能,有没有办法在没有 docker 集线器的情况下进行 docker 部署?
假设您有一个本地构建系统来构建您的 Docker 图像:您可以在标签中包含本地构建作业的构建号。这样您就可以确保您的要求:
... it is necessary that a certain tagged docker image always refer to the same image.
当您的本地构建自动推送到 docker 集线器时,可以确保每次推送都会推送带有唯一标签的图像。
标签系统无法防止图片被覆盖;你必须想出自己的流程来处理这个问题(h3nrik 的回答就是一个例子)。
但是,您可以改用 摘要。在注册表的新 v2 中,所有图像都被赋予一个校验和,称为摘要。如果图像或其任何基础层发生变化,摘要也会发生变化。因此,如果您按摘要拉取,则可以绝对确定该图像的内容没有随时间变化并且图像没有被篡改。
按摘要拉取如下所示:
docker pull debian@sha256:f43366bc755696485050ce14e1429c481b6f0ca04505c4a3093dfdb4fafb899e
当你做 docker push
时你应该得到摘要。
现在,我同意通过摘要拉取有点笨拙,因此您可能希望设置一个系统来简单地跟踪摘要和标签并验证图像是否未更改。
将来,这种情况可能会得到改善,使用 Notary 等工具对图像进行签名。此外,您可能希望查看使用标签来存储元数据,例如 git 哈希或内部版本号。
有什么方法可以防止使用与现有图片相同的标签将图片上传到 docker 中心?我们的用例如下。
我们使用 docker-compose 文件将图像标签作为版本号部署到生产环境。为了支持回滚到以前的环境和幂等部署,某个标记的 docker 图像必须始终引用相同的图像。
但是,docker 中心允许使用与现有图像相同的标签上传图像(它们会覆盖旧图像)。这完全打破了对图像进行版本控制的想法。
我们目前有变通办法,其中涉及我们的构建脚本提取图像的所有版本并查看标签以检查是否不会发生覆盖等。但感觉必须有更好的方法。
如果 docker 集线器不支持此功能,有没有办法在没有 docker 集线器的情况下进行 docker 部署?
假设您有一个本地构建系统来构建您的 Docker 图像:您可以在标签中包含本地构建作业的构建号。这样您就可以确保您的要求:
... it is necessary that a certain tagged docker image always refer to the same image.
当您的本地构建自动推送到 docker 集线器时,可以确保每次推送都会推送带有唯一标签的图像。
标签系统无法防止图片被覆盖;你必须想出自己的流程来处理这个问题(h3nrik 的回答就是一个例子)。
但是,您可以改用 摘要。在注册表的新 v2 中,所有图像都被赋予一个校验和,称为摘要。如果图像或其任何基础层发生变化,摘要也会发生变化。因此,如果您按摘要拉取,则可以绝对确定该图像的内容没有随时间变化并且图像没有被篡改。
按摘要拉取如下所示:
docker pull debian@sha256:f43366bc755696485050ce14e1429c481b6f0ca04505c4a3093dfdb4fafb899e
当你做 docker push
时你应该得到摘要。
现在,我同意通过摘要拉取有点笨拙,因此您可能希望设置一个系统来简单地跟踪摘要和标签并验证图像是否未更改。
将来,这种情况可能会得到改善,使用 Notary 等工具对图像进行签名。此外,您可能希望查看使用标签来存储元数据,例如 git 哈希或内部版本号。