通过内容信任实现自动化
目录
将 Docker Content Trust 内置到现有自动化中是很常见的 系统。要允许工具包装 Docker 并推送可信内容,有 环境变量。
本指南遵循使用 Docker Content Trust 对镜像进行签名中所述的步骤。确保您了解并遵循先决条件。
当直接与 Notary 客户端一起使用时,它使用自己的一组环境变量。
添加委托私钥
为了自动将委托私钥导入本地 Docker 信任存储,我们 需要为新密钥传递 passphrase。此密码将是必需的 每次该委托签署标签时。
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
$ docker trust key load delegation.key --name jeff
Loading key from "delegation.key"...
Successfully imported key from delegation.key
添加委托公钥
如果您在添加委托的同时初始化存储库 public key,那么您需要使用本地 Notary Canonical Root Key 的 passphrase 创建存储库信任数据。如果存储库已经 已启动,则您只需要 repositories passphrase。
# Export the Local Root Key Passphrase if required.
$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="rootpassphrase123"
# Export the Repository Passphrase
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="repopassphrase123"
# Initialize Repo and Push Delegation
$ docker trust signer add --key delegation.crt jeff registry.example.com/admin/demo
Adding signer "jeff" to registry.example.com/admin/demo...
Initializing signed repository for registry.example.com/admin/demo...
Successfully initialized "registry.example.com/admin/demo"
Successfully added signer: registry.example.com/admin/demo
对镜像进行签名
最后,在对镜像进行签名时,我们需要导出
签名密钥。这是在将密钥加载到本地 Docker 时创建的
trust store 替换为$ docker trust key load
.
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
$ docker trust sign registry.example.com/admin/demo:1
Signing and pushing trust data for local image registry.example.com/admin/demo:1, may overwrite remote trust data
The push refers to repository [registry.example.com/admin/demo]
428c97da766c: Layer already exists
2: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
Signing and pushing trust metadata
Successfully signed registry.example.com/admin/demo:1
以内容信任为基础进行构建
您还可以使用内容信任进行构建。在运行docker build
命令
您应该设置环境变量DOCKER_CONTENT_TRUST
手动或
以脚本化的方式。请考虑下面的简单 Dockerfile。
# syntax=docker/dockerfile:1
FROM docker/trusttest:latest
RUN echo
这FROM
标记正在拉取已签名的镜像。您不能构建具有FROM
既不在本地存在,也不签名。鉴于内容信任
标签存在数据latest
,以下构建应该会成功:
$ docker build -t docker/trusttest:testing .
Using default tag: latest
latest: Pulling from docker/trusttest
b3dbab3810fc: Pull complete
a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871
如果启用了内容信任,则从依赖于 tag 的 Dockerfile 构建 如果没有信任数据,则会导致 build 命令失败:
$ docker build -t docker/trusttest:testing .
unable to process Dockerfile: No trust data for notrust