Docker 加速器是 DaoCloud 推出的 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 pull those images locally.
Mirror 是 Docker Registry 的一种特殊类型,它起到了类似代理服务器的缓存角色,在用户和 Docker Hub 之间做镜像的缓存。这个功能的设计目的是为了企业客户访问 Docker Hub 时降低网络开销。
DaoCloud 加速器是我们为中国开发者提供的 Docker Hub Mirror 服务。DaoCloud 的博客有两篇文章非常详细的介绍了 Docker Hub Mirror 的工作机制,和 DaoCloud 加速器的后台架构:
Docker 镜像的分层文件系统是非常有趣的创新,作为 Docker 用户,大家感兴趣可以阅读 DaoCloud 成员孙宏亮撰写的 Docker 源码分析系列中有关 Docker镜像 的文章。
请先确定您的 Docker 版本高于 1.3.2。
然后参考 控制台中加速器 的操作手册。
二者有着本质的差别。
docker -v
查看您当前的版本。并且确保当您启动 Docker Deamon
进程时指定了 –-registry-mirror
参数,您可以参考加速器页面的“操作手册”获得详尽的配置帮助。Mirror 是 Docker 的官方机制,它是 Registry 的一种特殊类型,在部署了 Registry 之后,需要开启 Mirror 模式并做一定的配置。具体的流程如下图:
--registry-mirror
参数(Mirror 控制台中有详细的配置步骤)。下图是 DaoCloud 在搭建 Mirror 服务时,采用的架构:
我们选择了 UCloud 和七牛云存储。这样的架构是基于以下的几个考虑:
Docker Hub 由 Index 和 Registry 构成,Index 保存镜像层(Image Layer)的散列值(Hash)和关联关系等元数据(Metadata),Registry 用于存储镜像层的实际二进制数据。在客户端没有配置 --registry-mirror
参数的情况下,每一次镜像抓取,客户端都会先连接 Index 获取元数据,然后再连接 Registry 获取实际的Image文件。由于 Docker Hub 的 Index 节点和 Regsitry 都部署国外,国内用户访问,经常遭遇连接超时或中断的情况,下载速度也极其缓慢。
在启用了 Mirror 之后,访问流程如下:
通过以上的描述,可以发现,对于常用的镜像,Mirror 缓存命中率会非常高,如 Ubuntu 等基础镜像,这会极大的提高下载速度。同时 Docker 镜像采用分层的结构,即使镜像被更新,也只会下载被更新的数据层。
Mirror 服务亦可以通过网络优化,加速对远端 Docker Hub Registry 的访问速度,如采用高速的商业 VPN 建立从 Mirror 到 Docker Hub Registry 的访问。通过七牛等云存储和 CDN 分发网络,会进一步提高国内客户端的下载速度。