Skip to content

04 - 阿里云 ACR(容器镜像服务)

ACR 是什么?

ACR(Alibaba Cloud Container Registry)是阿里云提供的容器镜像托管服务,类似 Docker Hub 但更适合国内使用和企业场景。

┌──────────────────────────────────────────────────────────────┐
│                                                              │
│  开发者本地                      ACR                         │
│  ┌──────────┐    docker push    ┌─────────────────┐         │
│  │ 构建镜像  │ ───────────────► │ 镜像仓库          │         │
│  │ docker    │                  │                  │         │
│  │ build     │    docker pull   │ - 个人版 (免费)   │         │
│  │           │ ◄─────────────── │ - 企业版 (高级)   │         │
│  └──────────┘                  └────────┬────────┘         │
│                                         │                    │
│                                    ACK 集群                  │
│                               ┌────────┴────────┐          │
│                               │  imagePullSecret │          │
│                               │  自动拉取镜像     │          │
│                               └─────────────────┘          │
└──────────────────────────────────────────────────────────────┘

ACR 版本对比

特性个人版企业版
价格免费按量付费
命名空间3 个无限
仓库数300 个无限
镜像扫描基础高级 + 自动阻断
多地域同步不支持支持
P2P 加速不支持支持(大规模拉取)
制品管理镜像镜像 + Helm Chart
网络访问公网公网 + VPC 内网
适用场景个人/学习生产环境

ACR 个人版使用

1. 创建实例和仓库

  1. 登录阿里云控制台 → 容器镜像服务
  2. 创建个人版实例
  3. 设置 Registry 登录密码
  4. 创建命名空间(如 my-ml-project
  5. 创建镜像仓库(如 training

2. 登录 ACR

bash
# 登录(选择就近地域)
docker login --username=<阿里云账号> registry.cn-hangzhou.aliyuncs.com
# 输入 Registry 密码(不是阿里云密码)

# 常用地域 Registry 地址
# 杭州: registry.cn-hangzhou.aliyuncs.com
# 上海: registry.cn-shanghai.aliyuncs.com
# 北京: registry.cn-beijing.aliyuncs.com
# 深圳: registry.cn-shenzhen.aliyuncs.com

3. 推送镜像

bash
# 构建镜像
docker build -t my-training:v1 .

# 打 tag(格式:registry地址/命名空间/仓库名:tag)
docker tag my-training:v1 \
  registry.cn-hangzhou.aliyuncs.com/my-ml-project/training:v1

# 推送
docker push registry.cn-hangzhou.aliyuncs.com/my-ml-project/training:v1

4. 拉取镜像

bash
# 直接拉取
docker pull registry.cn-hangzhou.aliyuncs.com/my-ml-project/training:v1

在 ACK 中使用 ACR 镜像

方式 1:创建 imagePullSecret

bash
# 创建 Secret
kubectl create secret docker-registry acr-secret \
  --docker-server=registry.cn-hangzhou.aliyuncs.com \
  --docker-username=<阿里云账号> \
  --docker-password=<Registry密码> \
  --docker-email=<邮箱>

# 在 Pod 中使用
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      imagePullSecrets:
      - name: acr-secret          # 引用 Secret
      containers:
      - name: app
        image: registry.cn-hangzhou.aliyuncs.com/my-ml-project/training:v1

方式 2:ACK 免密拉取(推荐)

ACK 集群可以配置免密拉取同地域 ACR 镜像,无需 imagePullSecret:

  1. ACK 控制台 → 集群设置 → 免密插件
  2. 安装 aliyun-acr-credential-helper 组件
  3. 配置允许拉取的 ACR 命名空间

安装后,Pod 直接引用 ACR 镜像即可:

yaml
containers:
- name: app
  image: registry.cn-hangzhou.aliyuncs.com/my-ml-project/training:v1

方式 3:使用 VPC 内网地址(生产推荐)

同地域 ACK 拉取 ACR 镜像应使用VPC 内网地址,速度更快且不收公网流量费:

yaml
# 公网地址
image: registry.cn-hangzhou.aliyuncs.com/my-ns/app:v1

# VPC 内网地址(推荐)
image: registry-vpc.cn-hangzhou.aliyuncs.com/my-ns/app:v1

# 经典网络内网地址
image: registry-internal.cn-hangzhou.aliyuncs.com/my-ns/app:v1

镜像构建最佳实践

使用 ACR 自动构建(CI/CD)

ACR 支持绑定 GitHub/GitLab/Gitee 代码仓库,代码推送后自动构建镜像:

  1. ACR 控制台 → 镜像仓库 → 构建
  2. 绑定代码源(GitHub/Gitee)
  3. 配置构建规则:
    • 代码分支 / Tag 触发
    • Dockerfile 路径
    • 构建上下文

镜像 Tag 规范

bash
# ✗ 不推荐
my-app:latest        # 不知道是哪个版本

# ✓ 推荐:语义化版本
my-app:1.2.3

# ✓ 推荐:Git commit hash(CI/CD 中常用)
my-app:abc1234

# ✓ 推荐:日期 + 短 hash
my-app:20260315-abc1234

镜像安全扫描

bash
# ACR 控制台开启自动扫描
# 每次推送镜像后自动扫描漏洞

# 也可以使用开源工具本地扫描
# Trivy(推荐)
brew install trivy
trivy image registry.cn-hangzhou.aliyuncs.com/my-ns/app:v1

# 扫描结果示例:
# CRITICAL: 0
# HIGH: 2
# MEDIUM: 5

镜像加速

拉取国外镜像的加速方案

很多 K8s 依赖镜像在 registry.k8s.iodocker.io,国内直接拉取很慢或失败。

bash
# 方案 1:配置 Docker 镜像加速器
# Docker Desktop → Settings → Docker Engine
{
  "registry-mirrors": [
    "https://<你的ID>.mirror.aliyuncs.com"
  ]
}

# 方案 2:通过 ACR 转存
# 在 ACR 中创建镜像仓库,选择"海外"源镜像,自动同步

# 方案 3:手动转存
docker pull registry.k8s.io/ingress-nginx/controller:v1.10.0
docker tag registry.k8s.io/ingress-nginx/controller:v1.10.0 \
  registry.cn-hangzhou.aliyuncs.com/my-ns/ingress-nginx-controller:v1.10.0
docker push registry.cn-hangzhou.aliyuncs.com/my-ns/ingress-nginx-controller:v1.10.0

ACR 企业版特性

Helm Chart 托管

bash
# 登录 OCI Registry
helm registry login registry.cn-hangzhou.aliyuncs.com

# 推送 Chart
helm push my-chart-0.1.0.tgz oci://registry.cn-hangzhou.aliyuncs.com/my-ns

# 安装
helm install my-release oci://registry.cn-hangzhou.aliyuncs.com/my-ns/my-chart --version 0.1.0

多地域镜像同步

企业版支持配置同步规则,自动将镜像同步到多个地域:

杭州 ACR ──同步──► 北京 ACR
    │                │
    ▼                ▼
杭州 ACK          北京 ACK

适用于多地域部署的生产环境。


常用命令总结

bash
# === 登录 ===
docker login registry.cn-hangzhou.aliyuncs.com

# === Tag 和推送 ===
docker tag <local-image> registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:<tag>
docker push registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:<tag>

# === 拉取 ===
docker pull registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:<tag>
# VPC 内网
docker pull registry-vpc.cn-hangzhou.aliyuncs.com/<ns>/<repo>:<tag>

# === K8s Secret ===
kubectl create secret docker-registry acr-secret \
  --docker-server=registry.cn-hangzhou.aliyuncs.com \
  --docker-username=<user> \
  --docker-password=<pass>

# === 镜像扫描 ===
trivy image registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:<tag>

分布式训练中的 ACR 工作流

1. 本地开发训练代码


2. 构建训练镜像
   docker build -t registry.cn-hangzhou.aliyuncs.com/ml/training:v1 .


3. 推送到 ACR
   docker push registry.cn-hangzhou.aliyuncs.com/ml/training:v1


4. ACK 集群拉取(VPC 内网)
   image: registry-vpc.cn-hangzhou.aliyuncs.com/ml/training:v1


5. PyTorchJob 运行分布式训练

下一步

05 - AI 行业 K8s 最佳实践