zoukankan      html  css  js  c++  java
  • 使用Azure云存储构建高速 Docker registry

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

    使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情,虽然国内的一些docker社区也提供了所谓的加速器,但是实测结果并不理想。今天这篇文章就给大家介绍一下怎么借助Azure Storage来搭建一个高速的私有 Docker Hub (Registiry)。

    d4d-4-arch

    一图解千言,基本上一看你就明白了。我们利用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的帐号,建议把这个存储放置在北京或者上海;如果只有国际版的帐号,放在香港速度也是不错的。

    d4d-4-azure-storage

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

  • 相关阅读:
    PHP.TP框架下商品项目的优化2-图片优化
    PHP.TP框架下商品项目的优化1-时间插件、鼠标所在行高亮、布局规划页面
    PHP.26-TP框架商城应用实例-后台3-商品修改、删除
    PHP.25-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序
    PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
    PHP.23-ThinkPHP框架的三种模型实例化-(D()方法与M()方法的区别)
    PHP.22-Smart模版
    python爬取某站上海租房图片
    Python爬虫入门这一篇就够了
    按PEP8风格自动排版Python代码
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5782284.html
Copyright © 2011-2022 走看看