Skip to content

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区分部署环境
latestlatest不推荐生产,不可复现

多标签推送(同一镜像多个 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:仅用本地镜像。

最佳实践

  1. 生产镜像禁止用 latest,必须语义化/哈希 tag。
  2. 私有仓库启用 TLS 与鉴权。
  3. 镜像仓库与构建环境同区域,减少跨网传输。
  4. 定期清理过期 tag,结合漏洞扫描(见 Docker 安全)。