Docker Hub Mirror
什么是Docker Hub Mirror?
根据Docker的官方文档,Mirror的定义是:
Such a registry is provided by a third-party hosting infrastructure but is targeted at their customers only. Some mechanism ensures that public images are pulled from a sponsor registry to the mirror registry, to make sure that the customers of the third-party provider can
docker pullthose images locally.
Mirror是Docker Registry的一种特殊类型,它起到了类似代理服务器的缓存角色,在用户和Docker Hub之间做Image的缓存。 这个功能的设计目的是为了企业客户访问Docker Hub时降低网络开销,然而在中国这个巨大的局域网环境中,Mirror恰恰可以作为提升墙内下载速度的一种手段。
Mirror跟Private Registry有本质区别。Private Registry是开发者或者企业自建的Image存储库,通常用来保存企业内部的Docker Image,用于内部开发流程和产品的发布、版本控制。Mirror是一种代理中转服务,我们提供的Mirror服务,直接对接Docker Hub的官方Registry,Docker Hub上有数以十万计的各类Docker Image。在使用Private Registry时,需要在Docker Pull,或Dockerfile中直接键入Private Registry的地址,通常这样会导致跟Private Registry的绑定,缺少灵活性。使用Mirror服务,只需要在Docker Daemon的配置文件中加入Mirror参数,即可在全局范围内透明的访问官方的Docker Hub,避免了对Dockerfile Image引用来源的修改。
Mirror服务后台架构实现
Mirror是Docker的官方机制,它是Registry的一种特殊类型,在部署了Registry之后,需要开启Mirror模式并做一定的配置。具体的流程如下:

准备工作
- 在公有云环境部署Mirror Registry,并优化存储和网络访问(后文会详述)
- 在客户端,修改Docker的配置文件,添加registry-mirror参数(Mirror控制台中有详细的配置步骤)
Docker Hub由Index和Registry构成,Index保存Image Layer的hash和关联关系等元数据(Metadata),Registry用于存储Image Layer的实际二进制数据。在客户端没有配置registry-mirror参数的情况下,每一次docker pull,客户端都会先连接Index获取元数据,然后再连接Registry获取实际的Image文件。由于Docker Hub的Index节点和Regsitry都部署国外,国内用户访问,经常遭遇连接超时或中断的情况,下载速度也极其缓慢。在启用了Mirror之后,访问流程如下:
- 客户端的Docker Daemon连接Index获取Metadata,这一部分的数据量极小,直连国外的速度可以忍受
- 根据Metadata的信息,Docker Daemon与Mirror服务器建立连接。如果pull的Image在Mirror上已经有缓存,就直接在Mirror上返回地址并下载
- 如果Image在Mirror并无缓存,Mirror会与Docker Hub Registry建立连接,下载Image,提供给用户的同时,在本地缓存
- Mirror下载Docker Hub Image采用stream的方式,即可以一边下载,一边提供给客户端的Docker Daemon,不必等Image完全下载完
通过以上的描述,可以发现,对于常用的Image,Mirror缓存命中率会非常高,如Ubuntu等基础Image,这会极大提高下载速度。同时,Docker Image采用分层的结构,即使Image被更新,也只是下载最新一层非常少的增量数据。
Mirror服务亦可以通过网络优化,加速对远端Docker Hub Registry的访问速度,如采用高速的商业VPN建立从Mirror到Docker Hub Registry的访问。通过七牛等云存储和CDN分发网络,会进一步提高国内客户端的下载速度。
Mirror服务云端部署架构
下图是DaoCloud在搭建Mirror服务时,采用的架构。
我们选择了UCloud和七牛云存储。这样的架构是基于以下的几个考虑:
- 我们的Mirror服务主节点位于UCloud北京BGP机房。BGP机房网络上行下行的速度都非常快,有助于获得稳定高速的对外访问带宽,在Docker Hub Regsitry下载Image,获得不错的速度。
- 我们扩展了Mirror的Registry Disk Driver,使它可以支持UCloud的UDisk服务。
- BGP机房的云主机需要绑定外网IP,并且是根据带宽收费。提供类似Image下载服务,开销巨大。因此我们把下载缓存完成后的静态Image文件,定期同步到七牛云,即降低了带宽成本,同时也享受到了CDN的加速。我们通过代码检测需要下载的Image Layer是否在七牛有保存,如果有,就把访问重定向到七牛的URL,如果没有,就从UCloud的UDisk 直接下载。代码如下:

Mirror服务线上数据统计
Mirror服务上线至今,我们已经积累了数以千计的注册用户,在UDisk和七牛使用了超过100个GB的Image缓存,每月的下载API调用达到了3-4万次,网络流量峰值曾突破10个GB,平均下载速度超过了1MBps,下载速度峰值曾经达到过8MBps。下图是我们在七牛控制台的统计数据截图:
Docker Hub Mirror的更多相关文章
- 配置 Docker 加速器(Docker Hub Mirror)
Docker 加速器是什么,我需要使用吗? 使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验.因此 DaoCl ...
- docker 系列 - Docker 安装和Hub Mirror地址设置
======================为什么要使用Docker?======================= 容器真是个好东西, (1)容器能提供隔离性; (2)容器能打包环境, 简化部署难度 ...
- [Docker] Docker Hub加速
一.缘由: 今天学习Flask,书上建议用Docker,那我就安装了DockerToolBox(WIN10系统只能用toolbox).其中从docker hub拉取ubuntu镜像时 docker p ...
- 在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜像,即拉即用——daocloud国内镜像加速
Docker之所以这么吸引人,除了它的新颖的技术外,围绕官方Registry(Docker Hub)的生态圈也是相当吸引人眼球的地方. 在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜 ...
- 配置国内 Docker Registry Mirror
由于国内特殊的网络环境,往往我们从Docker Hub中拉取镜像并不能成功,而且速度特别慢. 那么我们可以给Docker配置一个国内的registry mirror,当我们需要的镜像在mirror中则 ...
- Docker Hub镜像加速器
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.Docker 官方和国内很多云服务商都提供了国内加速器服务. 1.配置加速地址 vim /etc/docker/daemo ...
- Docker Hub 镜像加速器
一.概述 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.Docker 官方和国内很多云服务商都提供了国内加速器服务. 二.配置加速地址 Ubuntu 16.04+.De ...
- Docker Hub仓库注册,使用
首先保证可以访问Docker Hub,所以需要先把host替换一下 : Google hosts ; 然后就是注册Docker Hub账户:https://hub.docker.com/; 然后就是在 ...
- 利用Docker Hub上的Nginx部署Web应用
Docker Hub上提供了很多镜像,如Nginx,我们不需要自己从ubuntu开始装Nginx再做发布,只需要先下载镜像到本地 docker pull nginx 在/opt下新建文件夹API,将需 ...
随机推荐
- Flickr Hosts
Test Page: http://www.flickr.com/help/test Hosts: 77.238.160.184 farm6.staticflickr.com 98.139.21.45 ...
- Oracle存储过程入参传入List集合的小例子
第一步:创建一个对象类型 create or replace type STUDENT as object( id ), name ), age ) ); / 第二步:创建一个数组类型 (任意选择下面 ...
- js精准时间迭代器(定时器)
/** * 精准时间迭代器 * Create By Tujia @2017.05.22 * * 使用示例: * window.setMyInterval(function(){ * console.l ...
- Hbase 管理页面
进入Hbase首页可以查看各种信息: http://192.168.23.128:16010/master-status
- YUV格式学习笔记
YUV与RGB表现图像的方法不同,其采用的是一个亮度信号加两个色差信号的方式来表现图像.其中UV表示的是CbCr,常见的YUV格式有:YUV4:2:0,YUV4:2:2,YUV4:1:1,YUV4:4 ...
- nmap 中的idle scan
http://www.offensive-security.com/metasploit-unleashed/Port_Scanning http://blog.csdn.net/dong976209 ...
- iOS提交审核:您的 App 正在使用广告标识符 (IDFA)
本文转载至 https://mp.weixin.qq.com/s?__biz=MzA3NzM0NzkxMQ==&mid=401172721&idx=1&sn=a369cf1b ...
- Android 中的 Context
主要的功能是加载和访问资源(Context通常用来获取APP资源,创建UI,获取系统Service服务,启动Activity,绑定Service,发送广播,获取APP信息等) 如何理解: 我们可以理解 ...
- thinkphp5.0 实现单文件上传功能
思路是:在app/ceshi/fire下面有一个index操作方法来渲染显示前端文件,然后前端文件跳转到upload操作方法进行处理,成功显示"文件上传成功",失败显示错误. 首先 ...
- 今日Java——Cay Horstmann访谈
这是本人在InfoQ中文站审校的文章,原文链接是:http://www.infoq.com/cn/articles/java_cay_horstmann,感觉内容很不错,分享给大家看看. 近日Info ...