这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 镜像仓库是软件供应链的核心节点。生产要控制镜像来源、版本、签名、扫描、账号和同步策略。
8.1 常见仓库
| 类型 | 示例 |
|---|---|
| 公共仓库 | Docker Hub |
| 云厂商仓库 | 各云容器镜像服务 |
| 私有仓库 | Harbor、Registry |
| CI 内部缓存 | 构建缓存仓库 |
私有 Harbor 常提供项目管理、复制、扫描、签名和审计能力。
8.2 镜像命名
registry.example.com/team/service:version
registry.example.com/team/service@sha256:digest
建议:
- 使用团队 / 服务层级;
- tag 包含版本或 Git SHA;
- 生产部署引用摘要或不可变 tag;
- 不复用已推送 tag;
- 禁止生产使用 latest。
8.3 登录与推送
docker login registry.example.com
docker build -t registry.example.com/shop/order-service:1.2.0 .
docker push registry.example.com/shop/order-service:1.2.0
凭据应从 CI Secret 或密钥管理系统注入,不写入脚本。
8.4 漏洞扫描
trivy image registry.example.com/shop/order-service:1.2.0
治理策略:
- 构建时扫描;
- 阻断高危漏洞;
- 定期重扫存量镜像;
- 跟踪基础镜像更新;
- 记录豁免原因和期限。
8.5 内容信任与签名
镜像签名用于确认镜像来源和内容未被篡改。常见能力包括 Notary、Cosign 和仓库策略。落地时要与 Kubernetes 准入策略配合,未签名镜像不允许部署。
8.6 仓库运维
必须规划:
- 存储容量和增长;
- GC 策略;
- 多机房同步;
- 备份恢复;
- 拉取限流;
- 审计日志;
- 账号权限;
- 证书和域名。
8.7 供应链安全流程
代码提交
-> CI 构建不可变镜像
-> 单元测试和安全扫描
-> 镜像签名
-> 推送私有仓库
-> 准入校验
-> 部署生产
本章小结
镜像仓库不只是存储镜像。生产需要不可变版本、漏洞扫描、签名校验、权限控制和容量治理,把供应链安全嵌入构建和发布流程。
思考题
- 为什么生产要使用不可变 tag 或摘要?
- 漏洞扫描为什么需要定期重扫?
- 镜像签名解决什么问题?
- 私有仓库如何做高可用?
- 如何阻断未签名镜像部署?