
由於眾所周知的原因, Docker 官方鏡像倉庫和 Google 鏡像倉庫在國內訪問速度很慢或者不可用。這樣就給我們在部署和使用 Kubernetes 時帶來了極大的不便。今天我們就來介紹幾種方法,可以讓你愉快的解決該問題。
既然是網絡方面的問題,解決該問題的思路就很簡單了,當然是使用國內可用的鏡像源。這里為大家推薦兩個好用的國內鏡像源:Azure 中國鏡像源和中科大鏡像源。
Azure 中國鏡像源
Azure 中國鏡像源地址:http://mirror.azure.cn/ Azure 中國鏡像源 Github 地址:https://github.com/Azure/container-service-for-azure-china 鏡像源配置說明:http://mirror.azure.cn/help/gcr-proxy-cache.html
中科大鏡像源
中科大鏡像源地址:http://mirrors.ustc.edu.cn/ 中科大鏡像源 Github 地址:https://github.com/ustclug/mirrorrequest 鏡像源配置說明:https://github.com/ustclug/mirrorrequest/issues/187
使用鏡像源加速 Docker.io 鏡像倉庫
hub.docker.com 是 Docker 官方鏡像倉庫,也是我們平時在使用 Docker 過程使用最多的一個鏡像倉庫。該鏡像倉庫平時拉取速度通常就只有幾十 Kb,非常的慢,使用起來嚴重影響了工作效率。
既然現在國內有鏡像源可用,我們當然直接使國內鏡像源便可。下面分別對其使用方法進行介紹。
如果在 Docker 官方倉庫拉取的是官方鏡像,拉取方法類似如下:
$ docker pull xxx:yyy
使用中科大鏡像源,應該類似這樣拉取:
$ docker pull docker.mirrors.ustc.edu.cn/library/xxx:yyy
使用 Azure 中國鏡像源,應該類似這樣拉取:
$ docker pull dockerhub.azk8s.cn/library/xxx:yyy
如果在 Docker 官方倉庫拉取的鏡像是私有倉庫 拉取方法類似如下:
$ docker pull xxx/yyy:zz
使用中科大鏡像源,應該類似這樣拉取:
$ docker pull docker.mirrors.ustc.edu.cn/xxx/yyy:zz
使用 Azure 中國鏡像源,應該類似這樣拉取:
$ docker pull dockerhub.azk8s.cn/xxx/yyy:zz
-
演示一個使用鏡像源拉取的實例
下面我們以拉取 mysql:5.7 和 360cloud/wayne 為例:
# 使用中科大鏡像源 $ docker pull docker.mirrors.ustc.edu.cn/library/mysql:5.7 $ docker pull docker.mirrors.ustc.edu.cn/360cloud/wayne
# 使用 Azure 中國鏡像源 $ docker pull dockerhub.azk8s.cn/library/mysql:5.7 $ docker pull dockerhub.azk8s.cn/360cloud/wayne
注:首次拉取時可能會有 Error:image library/mysql:5.7 not found 類似報錯,這說明鏡像源中沒有緩存該鏡像。這個屬於正常現像,因為加速鏡像都是先從官方鏡像倉庫進行拉取的,然后緩存到本地。遇到這種情況,你可以嘗試多拉取幾次即可。
使用鏡像源加速 gcr.io 鏡像倉庫
-
如果拉取的 Google 鏡像倉庫中容器鏡像類似如下:
$ docker pull gcr.io/xxx/yyy:zzz 使用中科大鏡像源,應該類似這樣拉取: $ docker pull gcr.mirrors.ustc.edu.cn/xxx/yyy:zzz 使用 Azure 中國鏡像源,應該類似這樣拉取: $ docker pull gcr.azk8s.cn/xxx/yyy:zzz
-
演示一個使用鏡像源拉取的實例
下面我們以拉取 gcr.io/kubernetes-helm/tiller:v2.9.1 為例: # 使用中科大鏡像源 $ docker pull gcr.mirrors.ustc.edu.cn/kubernetes-helm/tiller:v2.9.1 # 使用 Azure 中國鏡像源 $ docker pull gcr.azk8s.cn/kubernetes-helm/tiller:v2.9.1
使用鏡像源加速 k8s.gcr.io 鏡像倉庫
部署或使用 Kubernetes 時我們會使用到很多相關的鏡像,而這些鏡像通常會使用 k8s.gcr.io 這個鏡像倉庫。
其實 k8s.gcr.io 就是 gcr.io/google-containers 下面的容器鏡像,這樣我們也可以使用中科大鏡像源或者 Azure 中國鏡像源來對此進行加速。
-
如果我們拉取的 Kubernetes 所需容器鏡像類似以下形式:
$ docker pull k8s.gcr.io/xxx:yyy # 相當於$ docker pull gcr.io/google-containers/xxx:yyy 使用中科大鏡像源,應該類似這樣拉取: $ docker pull gcr.mirrors.ustc.edu.cn/google-containers/xxx:yyy 使用 Azure 中國鏡像源,應該類似這樣拉取: $ docker pull gcr.azk8s.cn/google-containers/xxx:yyy
-
演示一個使用鏡像源拉取的實例
下面我們以拉取 k8s.gcr.io/addon-resizer:1.8.3 為例:
# 使用中科大鏡像源 $ docker pull gcr.mirrors.ustc.edu.cn/google-containers/addon-resizer:1.8.3 # 使用 Azure 中國鏡像源 $ docker pull gcr.azk8s.cn/google-containers/addon-resizer:1.8.3
使用鏡像源加速 quay.io 鏡像倉庫
部署或使用 Kubernetes 相關周邊組件或生態時我們經常會從 quay.io 鏡像倉庫拉取鏡像。quay.io 默認情況下在國內也是不可用的,同樣我們也可以通過中科大鏡像源和 Azure 中國鏡像源進行加速訪問。
-
如果我們拉取的 quay.io 下所需容器鏡像類似以下形式:
$ docker pull quay.io/xxx/yyy:zzz 使用中科大鏡像源,應該類似這樣拉取: $ docker pull quay.mirrors.ustc.edu.cn/xxx/yyy:zzz 使用 Azure 中國鏡像源,應該類似這樣拉取: $ docker pull quay.azk8s.cn/xxx/yyy:zzz
-
演示一個使用鏡像源拉取的實例
下面我們以拉取 quay.io/coreos/kube-state-metrics:v1.5.0 為例:
# 使用中科大鏡像源 $ docker pull quay.mirrors.ustc.edu.cn/coreos/kube-state-metrics:v1.5.0 # 使用 Azure 中國鏡像源 $ docker pull quay.azk8s.cn/coreos/kube-state-metrics:v1.5.0
一些自動化工具
上面我們講解和演示了如何使用中科大和 Azure 中國鏡像源加速拉取鏡像的方法。不過這些方法都是手動的,還不夠方便。下面將介紹兩個小工具,讓你可以更加方便和快速的使用這些鏡像源。
docker-wrapper
一個 Python 編寫的工具腳本,可以替代系統的 Docker 命令,自動從 Azure 中國拉取鏡像並自動 Tag 為目標鏡像和刪除 Azure 鏡像,一氣呵成。
項目地址:https://github.com/silenceshell/docker_wrapper
docker-wrapper 安裝 $ git clone https://github.com/silenceshell/docker-wrapper.git $ sudo cp docker-wrapper/docker-wrapper.py /usr/local/bin/ docker-wrapper 使用 $ docker-wrapper pull k8s.gcr.io/kube-apiserver:v1.14.1 $ docker-wrapper pull gcr.io/google_containers/kube-apiserver:v1.14.1 $ docker-wrapper pull nginx $ docker-wrapper pull silenceshell/godaddy:0.0.2
azk8spull
一個 Shell 編寫的腳本,這個腳本功能和 docker-wrapper 類似。同樣可以自動從 Azure 中國拉取鏡像並自動 Tag 為目標鏡像和刪除 Azure 鏡像。
項目地址:https://github.com/xuxinkun/littleTools#azk8spull
azk8spull 安裝 $ git clone https://github.com/xuxinkun/littleTools$ cd littleTools $ chmod +x install.sh $ ./install.sh azk8spull 使用 $ azk8spull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1 $ azk8spull k8s.gcr.io/pause-amd64:3.1
參考文檔
-
https://www.google.com
-
https://ieevee.com/tech/2019/03/02/azure-gcr-proxy.html
-
https://www.cnblogs.com/xuxinkun/p/11025020.html
-
https://www.ilanni.com/?p=14534
