Skip to content

Docker Content Trust 原理

Docker Content Trust (DCT) 是 Docker 的内容信任机制,确保镜像的完整性和来源可信。

什么是内容信任?

内容信任使用数字签名来验证:

  • 镜像完整性 - 镜像未被篡改
  • 发布者身份 - 镜像来自可信的发布者
  • 时间戳 - 镜像的发布时间

工作原理

密钥体系

DCT 使用以下密钥:

  1. 离线密钥 (Root Key) - 最高权限,用于创建其他密钥
  2. 标签密钥 (Tag Key) - 用于签名镜像标签
  3. 时间戳密钥 (Timestamp Key) - 用于签名时间戳

签名流程

发布者                    Notary 服务              用户
  │                         │                      │
  │ 1. 构建镜像              │                      │
  │ 2. 使用标签密钥签名        │                      │
  │────────────────────────>│                      │
  │                         │                      │
  │                         │ 3. 拉取镜像          │
  │                         │<─────────────────────│
  │                         │                      │
  │                         │ 4. 验证签名          │
  │                         │─────────────────────>│
  │                         │                      │

启用内容信任

全局启用

sh
export DOCKER_CONTENT_TRUST=1

单次启用

sh
DOCKER_CONTENT_TRUST=1 docker pull nginx:latest

密钥管理

初始化密钥

sh
# 首次使用需要初始化
docker trust key generate my-key

查看密钥

sh
# 查看本地密钥
docker trust inspect --pretty nginx:latest

签名镜像

签名本地镜像

sh
# 签名镜像
docker trust sign nginx:latest

签名并推送

sh
# 构建并签名
docker build -t myimage:latest .
docker trust sign myimage:latest
docker push myimage:latest

验证镜像

拉取时自动验证

启用 DCT 后,拉取镜像时会自动验证:

sh
DOCKER_CONTENT_TRUST=1 docker pull nginx:latest

手动验证

sh
docker trust inspect --pretty nginx:latest

最佳实践

  1. 启用内容信任 - 生产环境必须启用
  2. 保护密钥 - 妥善保管离线密钥
  3. 定期轮换 - 定期更新密钥
  4. 验证签名 - 拉取镜像时验证签名
  5. 使用私有 Notary - 企业环境使用私有服务

BSFC Tech Pro Tip

生产环境应该启用 Docker Content Trust,确保镜像来源可信。


由 BSFC Tech 提供技术支持