简介
在本次实验中,我们将探讨如何使用 Docker 内容信任 (Docker Content Trust) 管理镜像签名,特别关注 docker trust revoke
命令。首先,我们会检查一个已签名的镜像,以了解签名是如何显示和验证的。
检查之后,我们将学习如何撤销镜像特定已签名标签的签名。然后,我们会再次检查镜像,以验证撤销操作是否成功。最后,我们将演示如何撤销仓库中所有标签的签名,并确认所有签名都已被移除。本次实验将为你提供管理 Docker 镜像相关信任的实践经验。
在本次实验中,我们将探讨如何使用 Docker 内容信任 (Docker Content Trust) 管理镜像签名,特别关注 docker trust revoke
命令。首先,我们会检查一个已签名的镜像,以了解签名是如何显示和验证的。
检查之后,我们将学习如何撤销镜像特定已签名标签的签名。然后,我们会再次检查镜像,以验证撤销操作是否成功。最后,我们将演示如何撤销仓库中所有标签的签名,并确认所有签名都已被移除。本次实验将为你提供管理 Docker 镜像相关信任的实践经验。
在这一步中,我们将学习如何检查已签名的 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 镜像签名的实践经验,这是维护容器镜像完整性和可信度的必备技能。