背景
部署 k8s 時經常遇到的難題:如何下載 gcr.io 的鏡像?下面以 ingress-nginx:0.43.0 為例介紹踩過的坑及最終的解決辦法。
踩過的坑
谷歌雲
注冊谷歌雲賬戶,通過控制台下載 ingress-nginx:0.43.0 鏡像,重命名后上傳回國內的鏡像倉庫,以供使用。
親測上傳一個 282 MB 的鏡像,阿里雲鏡像倉庫,騰訊鏡像倉庫,一個小時還未上傳完成,放棄。
於是注冊 hub.docker.com 上傳到 hub.docker.com,速度很快,本機從 hub.docker.com 拉取鏡像,又是二十分鍾還未完成,放棄。
阿里雲代理倉庫
阿里雲代理倉庫地址為:registry.aliyuncs.com/google_containers
很多新的鏡像都沒有,猜測是不維護了,放棄。
解決方法
后來在阿里雲鏡像倉庫那里看到一個海外構建的選項,於是嘗試以下方法:
github
在 github 創建一個 repository,創建好 git clone 到本地,在本地創建所需下載鏡像的 Dockerfile,本地目錄的層級可以是:鏡像名 --> 版本號 --> Dockerfile 。創建后上傳到 github,這是我的github地址 ,參考如下截圖:
打開 ingress-nginx 的 Dockerfile
FROM k8s.gcr.io/ingress-nginx/controller:v0.43.0
MAINTAINER liyi
看到這里應該差不多明白了,就是讓阿里雲鏡像倉庫去幫我們下載這個鏡像。
阿里雲鏡像
創建鏡像倉庫
選擇鏡像構建所依賴的在github倉庫
切記勾上 海外機器構建
添加構建規則
點擊立即構建
等一會鏡像就構建成功了,可以看到日志:
docker image building is started ...
[ fetch stage begin.]
fetch dockerfile and context
Cloning into '/user_data/1351706646383462/GIT_HUB/fsckzy-quayio'...
[fetch successfully.]
==========================================
......
==========================================
[docker build stage begin.]
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM k8s.gcr.io/ingress-nginx/controller:v0.43.0
v0.43.0: Pulling from ingress-nginx/controller
801bfaa63ef2: Already exists
ebc605c8c477: Pulling fs layer
......
...
ad50de7c1a14: Pull complete
Digest: sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
Status: Downloaded newer image for k8s.gcr.io/ingress-nginx/controller:v0.43.0
---> 38dca1cbd231
Step 2/2 : MAINTAINER liyi
---> Running in 7a3ef71d3191
Removing intermediate container 7a3ef71d3191
---> 1feb7033bf16
Successfully built 1feb7033bf16
Successfully tagged registry.cn-hangzhou.aliyuncs.com/smy-repo/ingress-nginx:0.43.0
[ build successfully.]
==========================================
[push stage begin.]
本機下載該鏡像,再重命名即可
docker pull registry.cn-hangzhou.aliyuncs.com/smy-repo/ingress-nginx:0.43.0