跳转至

加速镜像

访问镜像的目标地址是按镜像地址中主机部分来寻址,缺省时是hub.docker.com,考虑到很多私有化部署时下载镜像速度过慢。

访问过慢的原因无外乎,资源在国外或者私有化出口网络资源过窄。

现整理常用加速方式

  • 切换到镜像站
  • 下载到私有库
  • 使用代理通道

一、切换到镜像站

镜像站会将目标源站的资源缓存起来,并优化分发速度。

我们常使用的镜像站

  • 阿里registry.aliyun.com
  • 腾讯
  • 网易
  • 教育

二、下载到私有库

在私有网络环境自建存储库,常用存储库Harbor

从外部将镜像站下载并上传至私有存储库。

2.1 手动

将外部镜像产物拉到私有环境缓存起来下载脚本

#!/bin/bash

#
# usage
#  pull_image_to_local.sh kubernetesui/metrics-scraper:v1.0.7
#  pull_image_to_local.sh registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0
#  pull_image_to_local.sh nginx:1.21.4 third
#
# explain
#  docker pull kubernetesui/metrics-scraper:v1.0.7
#  docker tag kubernetesui/metrics-scraper:v1.0.7 hub.8ops.top/google_containers/metrics-scraper:v1.0.7
#  docker push hub.8ops.top/google_containers/metrics-scraper:v1.0.7
#  docker rmi kubernetesui/metrics-scraper:v1.0.7
#  docker rmi hub.8ops.top/google_containers/metrics-scraper:v1.0.7
#

set -e

src=$1
dst=$2
harbor=hub.8ops.top
[ -z ${dst} ] && dst=google_containers
docker pull ${src}
docker tag ${src} `echo ${src} |awk -v harbor=${harbor} -v dst=${dst} -F'/' '{printf("%s/%s/%s",harbor,dst,$NF)}'`
docker push `echo ${src} |awk -v harbor=${harbor} -v dst=${dst} -F'/' '{printf("%s/%s/%s",harbor,dst,$NF)}'`
docker rmi ${src}
docker rmi `echo ${src} |awk -v harbor=${harbor} -v dst=${dst} -F'/' '{printf("%s/%s/%s",harbor,dst,$NF)}'`

2.2 image-syncer

image-syncer是个不错的工具

auth.json

{
  "hub.8ops.top": {
    "username": "",
    "password": ""
  }
}

images.json

{
  "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.0": "hub.8ops.top/google_containers/kube-apiserver",
  "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.0": "hub.8ops.top/google_containers/kube-controller-manager",
  "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.0": "hub.8ops.top/google_containers/kube-scheduler",
  "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0": "hub.8ops.top/google_containers/kube-proxy",
  "registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6": "hub.8ops.top/google_containers/coredns",
  "registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0": "hub.8ops.top/google_containers/etcd",
  "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6": "hub.8ops.top/google_containers/pause"
}

需要存在项目 hub.8ops.top/google_containers ,否则会出现同步不成功情况

image-syncer --auth=auth.json --images=images.json --arch=amd64 --os=linux

一定要指定**arch**,否则会同步非预期的arch镜像产物过来

三、使用代理通道

原理是网络层面的代理访问。

3.1 系统代理

从系统层面使用网络代理

export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

3.2 工具代理

在下载镜像的位置使用网络代理加速访问速度。

常用的位置

  • dockerd
  • containerd
# ~/.docker/config.json
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.1.12:3128",
     "httpsProxy": "http://192.168.1.12:3128",
     "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
   }
 }
}