使用Azure云存储构建高速 Docker registry

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

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

相关阅读:


请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

使用Azure云存储构建高速 Docker registry的更多相关文章

  1. docker4dotnet #4 使用Azure云存储构建高速 Docker registry

    使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情, ...

  2. 【Microsoft Azure 的1024种玩法】三.基于Azure云平台构建Discuz论坛

    [简介] Discuz!是一套通用社区论坛软件系统,用户在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能.很强负载能力和可高度定制的论坛服务. [前期文章] [操作步骤] ...

  3. Microsoft Azure 云存储服务概念

    本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...

  4. Azure Container Registry-基于开源 Docker Registry 的专用 Docker 注册表服务

    本文语雀知识库:https://www.yuque.com/seanyu/azure/acr 概述 Azure 容器注册表(Azrue Container Registry,简称ACR)是 Azure ...

  5. vsts + XX云服务器构建netcore+docker持续集成交付部署

    持续集成交付部署是什么意思,它给我们带来什么好处? 先贴一张图 持续集成(Continuous Integration) 持续集成强调开发人员提交了新代码之后,立刻进行构建.(单元)测试(这个要看情况 ...

  6. 构建私有Docker Registry

    1.设置insecure-registry: 可能会出现无法push镜像到私有仓库的问题. 这是因为我们启动的registry服务不是安全可信赖的. 1) sudo vim /etc/default/ ...

  7. Docker registry垃圾回收

    Docker registry垃圾回收 通过: docker run -p 5000:5000 -v /netdata/xxxx/registry:/var/lib/registry registry ...

  8. 视频私有云实战:基于Docker构建点播私有云平台

    私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...

  9. 自建存储与使用微软Azure、七牛等第三方云存储综合考察分析

    http://www.cnblogs.com/sennly/p/4136734.html 各种云服务这两年炒的火热,加之可以降低成本,公司想先在部分业务上尝试使用下,刚好最近有个项目有大量小文件需要存 ...

随机推荐

  1. php/java bridge

    http://blog.163.com/wangyifeng_0821/blog/static/3077437220103645838478/ http://hi.baidu.com/luanxian ...

  2. ural 1207 Median on the Plane

    极角排序 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath& ...

  3. 【转】Win8/8.1/Win7小技巧:揪出C盘空间占用的真凶

    原文网址:http://www.ithome.com/html/win8/55496.htm 不少使用Win8.Win8.1的用户不难发现,原先只占用20G大小的系统盘,随着使用时间的增加,C盘的磁盘 ...

  4. MD中bitmap源代码分析--入题概述

    在MD模块中,各级raid都使用的一份bitmap的源码,也就是说共用一种bitmap的流程,下面以raid1的使用为例来分析bitmap的工作原理. 在使用raid1磁盘阵列的时候,对于数据的可靠性 ...

  5. 【转】 基于TFTP协议的远程升级设计

    版权声明:本文为博主原创文章,未经博主允许不得转载.联系邮箱:zhzhchang@126.com 说明:由于CSDN博客编辑器对word格式近乎不支持,因此对表格使用了图片方式(最后一个表格未使用图片 ...

  6. Javascript:简单拖拽效果的实现

    核心代码: /* *完成一个拖拽事件由三大事件组成: *1:onmousedown:选择元素 *2:onmousemove:移动元素 *3:onmouseup:释放元素 */ function dra ...

  7. hadoop权威指南 chapter2 MapReduce

    MapReduce MapReduce is a programming model for data processing. The model is simple, yet not too sim ...

  8. MVC三和,你能辨别它?

    上次我们聊的时间MVC,而之前我们学习过三层.那么我们不禁就要问,他们说的是一回事吗.他们有什么联系吗? 三层架构(3-tier application)通常意义上的三层架构就是将整个业务应用划分为: ...

  9. license文件生成原理

      byte解密weblogic加密oraclehex 现在很多J2EE应用都采用一个license文件来授权系统的使用,特别是在系统购买的早期,会提供有限制的license文件对系统进行限制,比如试 ...

  10. 50个android开发技巧

    50个android开发技巧 http://blog.csdn.net/column/details/androidhacks.html