简介
在这个实验中,你将学习如何使用 Docker 内容信任 (Docker Content Trust) 来管理 Docker 仓库的签名者。我们将首先检查仓库的当前签名者,以了解哪些人被授权对镜像进行签名。
检查之后,你将学习如何使用 docker trust signer add
命令向仓库添加新的签名者。最后,你将验证新的签名者是否已成功添加,确保现在有另一个实体可以为该仓库的镜像进行签名。
在这个实验中,你将学习如何使用 Docker 内容信任 (Docker Content Trust) 来管理 Docker 仓库的签名者。我们将首先检查仓库的当前签名者,以了解哪些人被授权对镜像进行签名。
检查之后,你将学习如何使用 docker trust signer add
命令向仓库添加新的签名者。最后,你将验证新的签名者是否已成功添加,确保现在有另一个实体可以为该仓库的镜像进行签名。
在这一步中,你将学习如何检查 Docker 仓库的当前签名者。Docker 内容信任 (Docker Content Trust) 允许你验证所使用镜像的完整性和发布者。签名者是被授权为特定仓库的镜像进行签名的实体。
首先,让我们启用 Docker 内容信任。这可以通过将 DOCKER_CONTENT_TRUST
环境变量设置为 1
来实现。
export DOCKER_CONTENT_TRUST=1
现在内容信任已启用,当你拉取镜像时,Docker 将验证其签名。如果镜像未签名或签名无效,拉取操作将失败。
要检查仓库的当前签名者,我们使用 docker trust signer
命令。我们将检查 library/ubuntu
仓库的签名者,这是一个知名的官方镜像。
docker trust signer library/ubuntu
此命令将列出与 library/ubuntu
仓库关联的签名者。你将看到类似以下的输出,显示签名者的名称及其密钥 ID:
Signers for library/ubuntu
SIGNER KEYS
DOCKER OFFICIAL 7000000000000000000000000000000000000000000000000000000000000000
输出显示 library/ubuntu
仓库由“DOCKER OFFICIAL”使用特定的密钥 ID 进行签名。这证实了你从该仓库拉取的镜像由 Docker 官方签名。
在这一步中,你将学习如何向 Docker 仓库添加新的签名者。当你希望允许其他方或系统为你的仓库的镜像进行签名时,这非常有用。
在添加签名者之前,你需要有一个签名密钥。如果你没有,可以使用 docker trust key generate
命令生成一个新的密钥对。在这个实验中,我们假设你已经有了一个密钥对。
要添加新的签名者,我们使用 docker trust signer add
命令。此命令需要新签名者的名称、仓库名称以及新签名者的公钥路径。
为了演示,让我们创建一个虚拟的公钥文件。在实际场景中,这将是新签名者提供的公钥。
echo "-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0AQICYQADggEPADRUb2tlbiBmb3IgYSB0ZXN0IHNpZ25lcg==
-----END PUBLIC KEY-----" > ~/project/new_signer.pub
此命令在你的 ~/project
目录中创建一个名为 new_signer.pub
的文件,其中包含一些虚拟的公钥内容。
现在,让我们将一个名为 my-new-signer
的新签名者添加到假设的仓库 your-dockerhub-user/my-image
中。如果你要在真实的仓库中执行此操作,请将 your-dockerhub-user
替换为你的 Docker Hub 用户名。在这个实验中,我们使用占位符。
docker trust signer add my-new-signer your-dockerhub-user/my-image --key ~/project/new_signer.pub
系统会提示你输入仓库根密钥的密码。这是一项安全措施,以确保只有授权用户才能添加签名者。由于这是一个实验环境,并且我们没有与真实的 Docker 注册表进行交互,你可以输入一个虚拟密码。
输入密码后,该命令将把新的签名者添加到仓库的信任数据中。你应该会看到表明签名者已添加的输出。
Adding signer "my-new-signer" to your-dockerhub-user/my-image...
Successfully added signer "my-new-signer" to your-dockerhub-user/my-image
此命令会更新 Docker 注册表上指定仓库的信任数据,添加新签名者的公钥。
在这一步中,你将验证在上一步中添加的新签名者是否已成功添加到仓库的信任数据中。
为此,你将再次使用 docker trust signer
命令,就像在第一步中检查原始签名者时那样。这次,你将检查添加了新签名者的仓库的签名者。
回顾一下,你将签名者 my-new-signer
添加到了假设的仓库 your-dockerhub-user/my-image
中。让我们检查这个仓库的签名者。请记得将 your-dockerhub-user
替换为上一步中使用的占位符。
docker trust signer your-dockerhub-user/my-image
此命令将向 Docker 注册表查询与 your-dockerhub-user/my-image
仓库关联的信任数据,并列出所有签名者。
现在你应该会看到包含原始签名者(如果有的话)和上一步中添加的新签名者 my-new-signer
的输出。输出将显示每个签名者的名称及其对应的密钥 ID。
Signers for your-dockerhub-user/my-image
SIGNER KEYS
my-new-signer <key ID of the new signer>
输出中出现 my-new-signer
证实了该签名者已成功添加到仓库的信任数据中。这意味着当启用 Docker 内容信任时,使用与 my-new-signer
关联的公钥签名的镜像现在将被视为该仓库的可信镜像。
在这个实验中,你学习了如何使用 Docker 内容信任(Docker Content Trust)管理 Docker 仓库的签名者。首先,你启用了 Docker 内容信任,以确保镜像的完整性和发布者的身份验证。然后,你使用 docker trust signer
命令练习检查仓库(具体是 library/ubuntu
镜像)的当前签名者,该命令会显示现有的签名者及其密钥 ID。
检查之后,你使用 docker trust signer add
命令将新的签名者添加到仓库。这一步对于允许其他实体为特定仓库的镜像进行签名至关重要。虽然节选内容中未提供添加签名者的完整详细信息,但本实验的目标是展示这一功能。最后一步是验证新签名者是否已成功添加,这需要再次检查仓库的签名者,确认新添加的签名者已列出,从而确保整个过程顺利完成。