人工智能

docker4dotnet #4 使用Azure云存储搭建高速 Docker registry

时间:2010-12-5 17:23:32  作者:系统运维   来源:域名  查看:  评论:0
内容摘要:使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情,

使用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 { 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 "-> Swithc 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 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 "-> Swithc 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共享给团队使用了,但是不要忘记加入验证。

另外,如果你使用的是AWS或者阿里云,Docker Registry也提供了类似的driver可以搭建一样的环境,具体请参考:https://docs.docker.com/registry/storage-drivers/

【本文为专栏作者“徐磊”的原创稿件,转载请通过作者微信公众号devopshub获取授权】

戳这里,站群服务器看该作者更多好文

copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap