You need to enable JavaScript to run this app.
文档中心
镜像仓库

镜像仓库

复制全文
下载 pdf
镜像推拉
通过远端代理仓域名拉取 Docker Hub 镜像
复制全文
下载 pdf
通过远端代理仓域名拉取 Docker Hub 镜像
远端代理实例通过远端代理的缓存功能,实现就近访问的效果,有效提升跨境镜像拉取的效率。本文介绍如何通过远端代理仓的域名,拉取 Docker Hub 的官方镜像和非官方(第三方)镜像。​
注意​
  • 通过远端代理仓拉取 Docker Hub 中 非官方镜像 时,需要为远端代理仓开启 镜像拉取鉴权,设置访问镜像所需的用户名和密码。​
  • 本文档适用于拉取运行在 VKE 集群 中的镜像。如果镜像运行在 VCI 集群(容器网络模型为 VPC-CNI),通过远端代理仓拉取镜像的方法参见 创建实例并配置远端代理仓。​
拉取方式对比​
​
镜像类型​
官方镜像标识​
拉取命令格式​
示例​
Docker 官方镜像​
Docker 官方镜像,具有 Docker Official Image 标识。​alt​​
docker pull [代理仓域名]/library/[镜像名]:[版本号]​
docker pull ****.cr.volces.com/library/stable-alpine3.23-perl​
非 Docker 官方镜像​
非 Docker 官方镜像,不具有 Docker Official Image 标识。​alt​​
docker pull [代理仓域名]/[用户名]/[镜像名]:[版本号]​
docker pull ****.cr.volces.com/grafana/grafana:main-ubuntu​
​
前提条件​
  • 已创建 VKE 集群,操作详情参见 创建集群。​
  • (可选)使用标准版本远端代理仓时,需要获取 VKE 集群所处 VPC 信息。VPC 信息支持在集群概览页查看。​
  • ​alt​​
操作步骤​
第一步:创建远端代理仓​
  1. 登录 镜像仓库控制台,创建远端代理仓。本步骤仅介绍与本场景相关的参数,更多参数说明请参见 创建远端代理仓。​
  • ​
    参数​
    说明​
    远端代理​
    选择远端代理仓类型。​
    • 类型:选择 Docker 。​
    • 镜像拉取鉴权:拉取 非 Docker 官方镜像 时需要开启,并填写登录目标 Docker Hub 的用户名和密码。​
    ​
  1. 在远端代理仓概览页,获取 访问域名。​
  • ​alt​​
  1. (可选)使用标准版本远端代理仓时,需要在远端代理仓的 访问控制 > VPC 页面,添加 VKE 集群所在 VPC,确保代理和集群的网络连通。添加 VPC 的说明参见 连通本账号 VPC。​
说明​
小微版远端代理仓时默认使用同地域内网,无需单独配置。​
  • ​alt​​
第二步:拉取镜像​
使用 访问域名 拉取镜像文件至远端代理仓,代码示例如下。​
​
# docker pull [访问域名]/[命名空间]/[镜像仓库]:[镜像版本号]​
docker pull ****.cr.volces.com/library/nginx:stable-alpine3.23-perl​
​
操作结果​
拉取成功后,您可以在远端代理仓的镜像详情页查看已拉取的镜像。​
​​​
发布应用​
支持多种方式调用远端代理仓中的镜像文件,发布应用。​
  • 方式一:通过远端代理仓域名​
  • 使用 第一步 已获取的 访问域名 下载并使用镜像文件,示例代码如下。​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: nginx-demo​
    labels:​
    app: nginx-demo​
    spec:​
    replicas: 1​
    selector:​
    matchLabels:​
    app: nginx-demo​
    template:​
    metadata:​
    labels:​
    app: nginx-demo​
    spec:​
    containers:​
    - name: nginx​
    # 将原始镜像地址 nginx:stable-alpine3.23-perl​
    # 替换为「远端代理仓访问域名 + /library/镜像名:版本号」​
    # 请把 ****.cr.volces.com 替换为第一步获取的实际访问域名​
    image: ****.cr.volces.com/library/nginx:stable-alpine3.23-perl​
    ports:​
    - containerPort: 80​
    ​
  • 方式二:通过 Kyverno 替换访问域名​
  • 通过 Kyverno,在部署 Kubernetes 应用时自动替换访问域名。​
  1. 安装 Kyverno。​
  1. 创建 policy。​
说明​
复制以下 YAML 后,需将其中 2 处 [System domain name] 替换为 第一步 获取的远端代理仓访问域名,分别位于 initContainers 和 containers 的 image 字段。​
  • ​
    apiVersion: kyverno.io/v1​
    kind: ClusterPolicy​
    metadata:​
    name: replace-image-registry-with-harbor​
    annotations:​
    policies.kyverno.io/title: Replace Image Registry With Harbor​
    pod-policies.kyverno.io/autogen-controllers: none​
    policies.kyverno.io/category: Sample​
    policies.kyverno.io/severity: medium​
    policies.kyverno.io/subject: Pod​
    kyverno.io/kyverno-version: 1.11.4​
    kyverno.io/kubernetes-version: "1.27"​
    policies.kyverno.io/description: >-​
    Some registries like Harbor offer pull-through caches for images from certain registries.​
    Images can be re-written to be pulled from the redirected registry instead of the original and​
    the registry will proxy pull the image, adding it to its internal cache.​
    The imageData context variable in this policy provides a normalized view​
    of the container image, allowing the policy to make decisions based on various ​
    "live" image details. As a result, it requires access to the source registry and the existence​
    of the target image to verify those details.​
    spec:​
    rules:​
    - name: redirect-docker​
    match:​
    any:​
    - resources:​
    kinds:​
    - Pod​
    operations:​
    - CREATE​
    - UPDATE​
    mutate:​
    foreach:​
    - list: request.object.spec.initContainers[]​
    context:​
    - name: imageData​
    imageRegistry:​
    reference: "{{ element.image }}"​
    preconditions:​
    any:​
    - key: "{{imageData.registry}}"​
    operator: Equals​
    value: index.docker.io​
    patchStrategicMerge:​
    spec:​
    initContainers:​
    - name: "{{ element.name }}"​
    image: [System domain name]/{{imageData.repository}}:{{imageData.identifier}}​
    - list: request.object.spec.containers[]​
    context:​
    - name: imageData​
    imageRegistry:​
    reference: "{{ element.image }}"​
    preconditions:​
    any:​
    - key: "{{imageData.registry}}"​
    operator: Equals​
    value: index.docker.io​
    patchStrategicMerge:​
    spec:​
    containers:​
    - name: "{{ element.name }}"​
    image: [System domain name]/{{imageData.repository}}:{{imageData.identifier}}​
    ​
  1. 使用镜像地址nginx:stable-alpine3.23-perl发布应用。​
最近更新时间:2026.06.25 20:40:59
这个页面对您有帮助吗?
有用
有用
无用
无用