使用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研发运维一体化的信息

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

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

    使用Azure云存储构建高速 Docker registry 使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高 ...

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

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

  3. Microsoft Azure 云存储服务概念

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

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

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

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

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

  6. 构建私有Docker Registry

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

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

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

  8. Windows Azure HandBook (6) Azure带宽与Azure Blob云存储

    <Windows Azure Platform 系列文章目录> 在笔者这几年Azure售前工作中,经常会遇到客户提同样的问题:Azure 虚拟机的带宽是多少?Azure提供独享带宽吗?这个 ...

  9. 微软Azure云主机及blob存储的网络性能测试

    http://www.cnblogs.com/sennly/p/4137024.html 微软Azure云主机及blob存储的网络性能测试 1. 测试目的 本次测试的目的在于对微软Azure的云主机. ...

随机推荐

  1. webp图片实践之路

    最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...

  2. win10 环境 gitbash 显示中文乱码问题处理

    gitbash 是 windows 环境下非常好用的命令行终端,可以模拟一下linux下的命令如ls / mkdir 等等,如果使用过程中遇到中文显示不完整或乱码的情况,多半是因为编码问题导致的,修改 ...

  3. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  4. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  6. 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

    读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...

  7. MVC通过路由实现URL重写

    public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Ro ...

  8. 前端HTML5几种存储方式的总结

    接下来要好好总结一些知识,秋招来啦...虽然有好多知识都不大会,但是还是要努力一下,运气这种东西,谁知道呢~ 总体情况 h5之前,存储主要是用cookies.cookies缺点有在请求头上带着数据,大 ...

  9. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  10. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...