1. 背景

1.1 registry简介

谈及docker registry,docker爱好者最先想到的自然是Docker Hub。Docker Hub作为Docker官方支持的Docker Registry,拥有全球成千上万的Docker Image。全球的Docker爱好者除了可以下载Docker Hub开放的镜像资源之外,还可以向Docker Hub贡献镜像资源。在Docker Hub上,用户不仅可以享受公有镜像带来的便利,而且可以创建私有镜像库。Docker Hub是全国最大的Public Registry,另外Docker还支持用户自定义创建Private Registry。Private Registry主要的功能是为私有网络提供Docker镜像的专属服务,一般而言,镜像种类适应用户需求,私密性较高,且不会占用公有网络带宽。1

1.2 registry版本信息

在docker1.6版本之前只支持docker registry:v1版本,使用python写的,现在官方更支持的是v2版本,即distribution,是用go语言实现的。Docker Hub已经支持两个版本,以后转移到v2是必然的,在这里只对该版本作出分析。

2. 本文分析内容安排

  • Distribution的总架构图展示
  • Distribution架构图内部各模块功能与实现分析
  • 以Distribution命令的执行为例,进行Distribution运行流程阐述

3. Distribution总架构图

在资料匮乏的情况下学习Distribution的源码是一个劳累的过程,但却可以从中理解Distribution的设计原理以及架构。Distribution架构相对于Docker来说相当简单,主要有提供服务的前端以及存储数据的后端组成。
在此,先附上Distribution总架构图,如图3.1
Distribution总架构图
图3.1 Distribution总架构图
可见,Distribution前端作为整个架构的主体部分,首先读取用户运行registry时提供的yml文件参数配置Configuration,然后根据该配置参数以及Context新建并初始化handler.App,根据该App初始化了handler并将其赋值给Server,从而新建了一个Registry。
其中,要指明的是App中信息量庞大,注册了各endpoint需要调用的句柄,设置了存储驱动以及存储cache,auth以及Proxy等。
Http Server根据请求的类型发送至相应的router,调用对应的Handler来提供服务,handler会与Storage通信传送数据。这块儿具体数据传送流程将在源码分析(三)中详解。

4. Distribution各模块功能与实现分析

4.1 Registry
4.2 Digest

5. Distribution运行案例分析

6. 总结

7. 作者介绍

梁明远,国防科大并行与分布式计算国家重点实验室应届研究生,14年入学伊始便开始接触docker,准备在余下的读研时间在docker相关开源社区贡献自己的代码,毕业后准备继续从事该方面研究。邮箱:liangmingyuanneo@gmail.com

8. 参考文献

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐