如何使用 docker trust revoke 命令移除镜像签名

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,我们将探讨如何使用 Docker 内容信任 (Docker Content Trust) 管理镜像签名,特别关注 docker trust revoke 命令。首先,我们会检查一个已签名的镜像,以了解签名是如何显示和验证的。

检查之后,我们将学习如何撤销镜像特定已签名标签的签名。然后,我们会再次检查镜像,以验证撤销操作是否成功。最后,我们将演示如何撤销仓库中所有标签的签名,并确认所有签名都已被移除。本次实验将为你提供管理 Docker 镜像相关信任的实践经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/inspect -.-> lab-555254{{"如何使用 docker trust revoke 命令移除镜像签名"}} docker/pull -.-> lab-555254{{"如何使用 docker trust revoke 命令移除镜像签名"}} docker/tag -.-> lab-555254{{"如何使用 docker trust revoke 命令移除镜像签名"}} docker/images -.-> lab-555254{{"如何使用 docker trust revoke 命令移除镜像签名"}} end

检查已签名镜像以查看其签名

在这一步中,我们将学习如何检查已签名的 Docker 镜像以查看其签名。Docker 内容信任 (Docker Content Trust) 允许你验证镜像的完整性和发布者。当一个镜像被签名时,意味着发布者已经对该镜像进行了加密签名,你可以验证这个签名以确保镜像没有被篡改。

首先,我们需要启用 Docker 内容信任。这可以通过将 DOCKER_CONTENT_TRUST 环境变量设置为 1 来实现。

export DOCKER_CONTENT_TRUST=1

现在,让我们拉取一个已签名的镜像。我们将使用 docker/trusttest 镜像,它是专门为测试 Docker 内容信任而设计的。

docker pull docker/trusttest:latest

当你在启用 Docker 内容信任的情况下拉取一个已签名的镜像时,Docker 会验证签名。如果签名有效,拉取操作将成功。如果签名无效或缺失,拉取操作将失败。

要检查已签名镜像的签名,我们使用 docker trust inspect 命令,后跟镜像名称。

docker trust inspect docker/trusttest:latest

这个命令将输出有关镜像签名的信息,包括签名者及其密钥。你应该会看到与 docker/trusttest 镜像的 latest 标签相关的签名详细信息。这个输出确认了镜像已被签名,并显示了签名者是谁。

撤销特定已签名标签的签名

在这一步中,我们将学习如何撤销已签名 Docker 镜像特定标签的签名。撤销签名意味着使特定镜像标签的现有签名失效。如果密钥泄露,或者你需要移除对某个特定版本镜像的信任,这一操作就会很有用。

要撤销特定标签的签名,我们使用 docker trust revoke 命令,后跟镜像名称和标签。我们将撤销 docker/trusttest 镜像 latest 标签的签名。

docker trust revoke docker/trusttest:latest

当你运行此命令时,系统会提示你确认撤销操作。输入 y 并按回车键继续。

Are you sure you want to revoke signature for docker/trusttest:latest? (y/n) y

确认后,Docker 将撤销指定标签的签名。此操作会更新镜像在注册表中的信任数据。

再次检查镜像以验证撤销操作

在这一步中,我们将再次检查镜像,以验证 latest 标签的签名是否已成功撤销。在上一步撤销签名后,该特定标签的信任数据应已被移除或标记为无效。

我们将使用之前相同的 docker trust inspect 命令来检查 docker/trusttest:latest 镜像的签名。

docker trust inspect docker/trusttest:latest

这次,输出应表明 latest 标签没有签名。如果存在其他已签名的标签,你可能会看到相关信息,但 latest 部分应显示没有有效签名。这证实了撤销操作已成功。

如果你在撤销签名后,启用 DOCKER_CONTENT_TRUST=1 尝试拉取 docker/trusttest:latest 镜像,拉取操作应该会失败,因为该特定标签的镜像不再受信任。

撤销仓库中所有标签的签名

在这一步中,我们将学习如何撤销特定 Docker 镜像仓库中所有标签的签名。当你需要完全移除对整个仓库的信任时,这一操作很有用,比如发生了安全事件,或者你决定不再使用该来源的镜像。

要撤销仓库中所有标签的签名,我们使用 docker trust revoke 命令,后跟仓库名称,无需指定标签。我们将撤销 docker/trusttest 仓库的所有签名。

docker trust revoke docker/trusttest

当你运行此命令时,系统会提示你确认是否要撤销该仓库中所有标签的签名。输入 y 并按回车键继续。

Are you sure you want to revoke all signatures for docker/trusttest? (y/n) y

确认后,Docker 将撤销与 docker/trusttest 仓库关联的所有标签的签名。此操作会有效移除该仓库在注册表中的所有信任数据。

检查仓库以验证所有签名已被移除

在这最后一步中,我们将再次检查 docker/trusttest 仓库,以验证其所有标签的签名是否已成功移除。在上一步撤销所有签名后,整个仓库的信任数据应该已被清除。

我们将使用 docker trust inspect 命令,这次只指定仓库名称,不指定任何标签。

docker trust inspect docker/trusttest

该命令的输出现在应表明,docker/trusttest 仓库未找到任何签名。这证实了所有签名的撤销操作已成功。

至此,使用 Docker Content Trust 撤销 Docker 镜像签名的实验就结束了。你已经学会了如何撤销特定标签和整个仓库的签名。

总结

在本次实验中,我们学习了如何使用 Docker Content Trust 管理镜像签名。首先,我们启用了 Docker Content Trust 并拉取了一个已签名的镜像(docker/trusttest:latest),以了解 Docker 在拉取过程中如何验证签名。然后,我们使用 docker trust inspect 命令查看与该镜像关联的签名,确认其已签名状态并识别签名者。

随后,我们探索了如何撤销签名。我们学习了使用 docker trust revoke 命令从特定的镜像标签(docker/trusttest:latest)中移除签名,并通过再次检查镜像来验证撤销操作。最后,我们将这一知识扩展到撤销仓库中所有标签的签名,并通过检查确认签名已被完全移除。本次实验提供了检查和撤销 Docker 镜像签名的实践经验,这是维护容器镜像完整性和可信度的必备技能。