主题
Docker 镜像仓库
镜像仓库(Registry)用于集中存储与分发镜像。本文介绍 Docker Hub、私有仓库、云厂商镜像服务及 tag 规范。
Docker Hub
公共仓库,默认 docker pull 即从 Docker Hub 拉取。
bash
# 登录
docker login
# 打标签(格式:用户名/仓库:tag)
docker tag myapp yanshaodong/myapp:v1
# 推送
docker push yanshaodong/myapp:v1匿名拉取有速率限制(匿名每 6 小时约 100 次),CI 环境建议登录或用镜像加速。
私有仓库(registry 镜像)
使用官方 registry 镜像快速搭建私有仓库:
bash
docker run -d -p 5000:5000 --name registry registry:2
docker tag myapp localhost:5000/myapp:v1
docker push localhost:5000/myapp:v1默认 HTTP 且未鉴权,生产需配 TLS + 认证(如 htpasswd / 反向代理)。
云厂商镜像服务
主流云厂都提供托管镜像仓库(支持 VPC 内网加速、漏洞扫描、访问控制):
- 阿里云容器镜像服务 ACR
- 腾讯云容器镜像服务 TCR
- 华为云 SWR
Harbor 是流行的开源企业级仓库,支持权限、复制、签名与扫描。
CNB 云原生构建镜像仓库
使用 CNB 构建时,镜像推送到 CNB 内置仓库。注意其路径层级限制:
- CNB 镜像仓库仅支持二级路径,例如:
${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}/prometheus:tag - 不支持三级路径,如
.../prometheus/techrightcloud:tag会失败。 - 项目存在多个镜像变体时,通过 tag 前缀 区分,而非路径层级:
prometheus:techrightcloud-${COMMIT_SHORT}
镜像 Tag 规范
良好的 tag 策略便于回滚与追踪:
| Tag 形式 | 示例 | 说明 |
|---|---|---|
| 语义版本 | v1.2.3 | 推荐,明确可回滚 |
| 提交哈希 | 2026-08-28-abc1234 | 关联代码提交 |
| 环境标识 | prod / test | 区分部署环境 |
latest | latest | 不推荐生产,不可复现 |
多标签推送(同一镜像多个 tag):
bash
docker build -t myapp:v1.2.3 -t myapp:2026-08-28-abc1234 -t myapp:prod .
docker push myapp --all-tags镜像拉取策略
Kubernetes / Swarm 中通过 imagePullPolicy 控制:
IfNotPresent:本地没有才拉(默认,tag 非 latest 时)。Always:每次都拉(tag 为latest时默认)。Never:仅用本地镜像。
最佳实践
- 生产镜像禁止用
latest,必须语义化/哈希 tag。 - 私有仓库启用 TLS 与鉴权。
- 镜像仓库与构建环境同区域,减少跨网传输。
- 定期清理过期 tag,结合漏洞扫描(见 Docker 安全)。