distribution源码分析(一):Distribution架构
1. 背景1.1 registry简介谈及docker registry,docker爱好者最先想到的自然是Docker Hub。Docker Hub作为Docker官方支持的Docker Registry,拥有全球成千上万的Docker Image。全球的Docker爱好者除了可以下载Docker Hub开放的镜像资源之外,还可以向Docker Hub贡献镜像资源。在Docker Hub上,用户
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
图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. 参考文献
更多推荐
所有评论(0)