我教你如何解決 Docker 下載 mcr.microsoft.com 映象慢的辦法
我教你如何解決 Docker 下載 mcr.microsoft.com 映象慢的辦法
一、介紹
最近,我在寫有關使用 Jenkins 搭建企業級持續整合環境的文章,準備了四臺伺服器,企業級別嘛,一臺就不是企業級別了。在這個過程中遇到了很多問題,也遇到了很多坑,也是憑著自己的不懈努力,每個問題都解決了。其中有一個問題就是,我要把 Net 5.0 的專案構建成映象,我也為專案增加了 Dockerfile 檔案,但是在險資微軟官方映象的時候非常慢,為了解決這個問題,我花費了一天多的時間,嘗試每一種解決方法,很多都是行不通的。
功夫不負有心人,自己在找遍網路,還終於找到了解決辦法,沒別的,好東西就記錄下來,以防自己下次需要的時候可以立刻找到。MCR(Miscrosoft Container Registry) 加速器,助你在中國大陸急速下載 netcore 相關的 docker 映象。
二、解決辦法。
1、如何使用
至少三種方法進行加速:
使用 docker-mcr (推薦)
拉取國內伺服器上的映象
使用 DockerHub 加速器
注意,無論採用什麼方式,請先確保本地的 docker 已經正常可用。
2、使用 docker-mcr (推薦)
docker-mcr 是一個 dotnet core global tool,簡單幾步,便可以進行安裝和使用。
進入 dotnet 頁面,下載並安裝 netcore 3.1 SDK 或者 Net 5.0,如果沒有安裝 SDK,是無法使用 dotnet 命令的。
安裝完畢後開啟控制檯執行以下命令:#dotnet tool install newbe.mcrmirror -g
如果已經安裝,會提示已經安裝。
現在,假如需要拉取 mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim ,則執行以下命令:#docker-mcr -i mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim
等待完成之後,便可以在本地看到已經拉取完畢的映象。
您可以執行 docker-mcr --help 來檢視更多的引數配置方式。
命令:#docker-mcr --help
如果您曾經安裝過 newbe.mcrmirror,您需要使用 dotnet tool update newbe.mcrmirror -g命令來進行升級,確保最佳的體驗。
命令:#dotnet tool update newbe.mcrmirror -g
3、拉取國內伺服器上的映象
加速的本質是因為我將映象推送到了國內的伺服器,目前在以下伺服器均存在映象:
阿里雲:registry.cn-hangzhou.aliyuncs.com/newbe36524
騰訊雲:ccr.ccs.tencentyun.com/mcr_newbe36524
以下以阿里云為例進行說明,假設需要拉取 【aspnet:3.1-buster-slim】 和【sdk:3.1-buster】
則拼接上面的字首,則得到地址【registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:3.1-buster-slim】 和【registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:3.1-buster】 。
然後,為了不修改預設的 Dockerfile 您可以執行以下命令:
1 3.1 版本 2 3 #docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:3.1-buster-slim 4 #docker tag registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:3.1-buster-slim mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
5 #docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:3.1-buster 6 #docker tag registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:3.1-buster mcr.microsoft.com/dotnet/core/sdk:3.1-buster
ASP.NET 3.1 映象
ASP.NET SDK 3.1 映象
這樣你就成功的在本地得到了 【mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim】和【mcr.microsoft.com/dotnet/core/sdk:3.1-buster】 映象。
當然,你也可以直接把 【registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:3.1-buster-slim】和【registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:3.1-buster】 寫入到你的 Docker file 中。
1 5.0 版本 2 3 #docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0-buster-slim 4 #docker tag registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0-buster-slim mcr.microsoft.com/dotnet/core/aspnet:5.0-buster-slim 5 6 7 #docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:5.0-buster-slim 8 #docker tag registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:5.0-buster-slim mcr.microsoft.com/dotnet/core/sdk:5.0-buster-slim
ASP.NET 5.0 映象
ASPNET SDK 5.0 映象
這樣你就成功的在本地得到了【mcr.microsoft.com/dotnet/core/aspnet:5.0-buster-slim】 和 【mcr.microsoft.com/dotnet/core/sdk:5.0-buster-slim】 映象。
當然,你也可以直接把 【registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0-buster-slim】 和 【registry.cn-hangzhou.aliyuncs.com/newbe36524/sdk:5.0-buster-slim】寫入到你的 Dockerfile 中。
4、使用 DockerHub 加速器(這個開始有點慢)
我也將映象推送到了 DockerHub ,所以正常來說,在中國大陸使用 DockerHub 加速器也可以達到加速的效果。
規則,mcr.microsoft.com/dotnet/cre/{name}:{tag} -> newbe36524/{name}:{tag}
ASP.NET 3.1 映象
【1】、命令:#docker pull newbe36524/aspnet:3.1-buster-slim
【2】、命令:#docker tag newbe36524/aspnet:3.1-buster-slim mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
【3】、命令:#docker images
1 #docker pull newbe36524/aspnet:3.1-buster-slim 2 #docker tag newbe36524/aspnet:3.1-buster-slim mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
3 #docker pull newbe36524/sdk:3.1-buster
4 #docker tag newbe36524/sdk:3.1-buster mcr.microsoft.com/dotnet/core/sdk:3.1-buster
ASP.NET 3.1 映象
【1】、命令:#docker pull newbe36524/sdk:3.1-buster
【2】、命令:#docker tag newbe36524/sdk:3.1-buster mcr.microsoft.com/dotnet/core/sdk:3.1-buster
【3】、命令:#docker images
這樣你就得到了【mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim】和【mcr.microsoft.com/dotnet/core/sdk:3.1-buster】 映象。當然,你也可以直接把 【newbe36524/aspnet:3.1-buster-slim】和【newbe36524/sdk:3.1-buster】 寫入到你的 Dockerfile 中。在此之前,請確保你正確配置了本地的加速器。
三、結束
當我們在設計程式的時候,經常會出現問題或者叫是坑,我們很憤怒,但是,我們冷靜下來,把問題解決的時候,又是一身輕鬆。細細思量,我們解決問題的過程也是進步的過程。最起碼,在下次遇到同樣的或者類似的問題,我們不至於手忙腳亂。每天進步一點點,不忘初心,繼續努力。大家可以直接去Github 上檢視原文,地址【https://github.com/newbe36524/Newbe.McrMirror】。