docker4 dotnet使用Azure雲端儲存構建高速 Docker registry

來源:互聯網
上載者:User
使用Docker來構建應用程式最常見的操作就是 docker run 或者 docker pull了,但是由於眾所周知的原因,在國內想要高速穩定的擷取docker hub上面的資源並不是件容易的事情,雖然國內的一些docker社區也提供了所謂的加速器,但是實測結果並不理想。今天這篇文章就給大家介紹一下怎麼藉助Azure Storage來搭建一個高速的私人 Docker Hub (Registiry)。

一圖解千言,基本上一看你就明白了。我們利用Docker Registry 提供的 Azure Storage 儲存模式,將2個不同的registry 容器串連到同一個blob儲存上,其中一個registry容器運行在Azure香港的資料中心,另外一個運行在我本地docker-machine中。需要docker pull的時候,我們使用香港的容器進行操作,並push到本地的registry中;這個操作其實會把鏡像上傳至Azure的blob儲存中;本地在pull鏡像的時候就可以直接從Azure儲存中下載了,速度非常快,關鍵是更加穩定。

搭建這個環境也很簡單:

1. 使用docker-machine 在香港的Azure資料中心中建立一台容器化主機

docker-machine create --driver azure --azure-subscription-id {sub-id} --azure-open-port 80 --azure-location "EastAsia" {machine-name}

2. 在Azure Storage中建立儲存帳號,擷取存取金鑰

如果你有中國版Azure的帳號,建議把這個儲存放置在北京或者上海;如果只有國際版的帳號,放在香港速度也是不錯的。

3. 在香港和本地的docker-machine中分別使用同樣的命令啟動regsitry容器

macOS/linux 指令碼

docker run -d -p 5000:5000 \
 -e REGISTRY_STORAGE=azure \
 -e REGISTRY_STORAGE_AZURE_ACCOUNTNAME="{Account Name}" \
 -e REGISTRY_STORAGE_AZURE_ACCOUNTKEY="{access key}" \
 -e REGISTRY_STORAGE_AZURE_CONTAINER="{storage container name}" \
 -e REGISTRY_STORAGE_AZURE_REALM="core.chinacloudapi.cn" \
 --name=registry \
 --restart=always \
 registry:2
Windows指令碼

docker run -d -p 5000:5000 ^
 -e REGISTRY_STORAGE=azure ^
 -e REGISTRY_STORAGE_AZURE_ACCOUNTNAME="{Account Name}" ^
 -e REGISTRY_STORAGE_AZURE_ACCOUNTKEY="{access key}" ^
 -e REGISTRY_STORAGE_AZURE_CONTAINER="{storage container name}" ^
 -e REGISTRY_STORAGE_AZURE_REALM="core.chinacloudapi.cn" ^
 --name=registry ^
 --restart=always ^
 registry:2
注意以上我所使用的是中國版Azure儲存帳號,如果使用國際版,請更新 REGISTRY_STORAGE_AZURE_REALM 這個參數。

4. 使用指令碼一次性完成鏡像拉取

macOS或者Linux的指令碼 pull-image.sh

 echo There are $# arguments to $0: $*
 echo Pulling image $3 from docker hub via azure storage
 echo Usage
 echo "-------------------------------------------"
 echo "$1 is the offshore docker-machine name"
 echo "$2 is the local docker-machine name"
 echo "$3 is the image name"
 echo "-------------------------------------------"
 
 echo "-> switch to $1"
 eval $(docker-machine env $1)
 echo "-> pulling image $3"
 docker pull $3
 echo "-> tag image $3 and push to local registry"
 docker tag $3 localhost:5000/$3
 docker push localhost:5000/$3
 echo "-> Pull from registry in localhost into $2"
 eval $(docker-machine env $2)
 docker pull localhost:5000/$3
 docker tag localhost:5000/$3 $3
 docker rmi localhost:5000/$3
 echo "-> Done!"
Windows 指令碼 pull-image.cmd

 echo off
 echo Usage
 echo "-------------------------------------------"
 echo "%1 is the offshore docker-machine name"
 echo "%2 is the local docker-machine name"
 echo "%3 is the image name"
 echo "-------------------------------------------"
 
 echo "-> switch to %1"
 @FOR /f "tokens=*" %i IN ('docker-machine env %1') DO @%i
 echo "-> pulling image %3"
 docker pull $3
 echo "-> tag image %3 and push to local registry"
 docker tag %3 localhost:5000/%3
 docker push localhost:5000/%3
 echo "-> Pull from registry in localhost into %2"
 @FOR /f "tokens=*" %i IN ('docker-machine env %2') DO @%i
 docker pull localhost:5000/%3
 docker tag localhost:5000/%3 %3
 docker rmi localhost:5000/%3
 echo "-> Done!"
當然,你也可以把這個registry容器運行在雲端的docker-machine裡面,這樣你就可以把這個registry共用給團隊使用了,但是不要忘記加入驗證。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.