Docker Content Trust 原理
Docker Content Trust (DCT) 是 Docker 的内容信任机制,确保镜像的完整性和来源可信。
什么是内容信任?
内容信任使用数字签名来验证:
- 镜像完整性 - 镜像未被篡改
- 发布者身份 - 镜像来自可信的发布者
- 时间戳 - 镜像的发布时间
工作原理
密钥体系
DCT 使用以下密钥:
- 离线密钥 (Root Key) - 最高权限,用于创建其他密钥
- 标签密钥 (Tag Key) - 用于签名镜像标签
- 时间戳密钥 (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最佳实践
- 启用内容信任 - 生产环境必须启用
- 保护密钥 - 妥善保管离线密钥
- 定期轮换 - 定期更新密钥
- 验证签名 - 拉取镜像时验证签名
- 使用私有 Notary - 企业环境使用私有服务
BSFC Tech Pro Tip
生产环境应该启用 Docker Content Trust,确保镜像来源可信。