【原创】docker源码分析(3)---镜像 (2)

本文深入分析了Docker的TagStore,解释了如何管理镜像标签,包括tag、image_get、image_inspect和push等操作。TagStore维护了当前可用镜像的信息,通过json文件进行持久化。文中详细阐述了各个操作的实现过程,并对相关函数进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1462342295

 

本文优快云博客链接:http://blog.youkuaiyun.com/screscent/article/details/51314697

 

 

5、TagStore

 

在代码docker\daemon\daemon.go

func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error) {

初始化了一个tagStore

然后在

func (daemon *Daemon) Install(eng *engine.Engine) error {

 

调用了Install

我们先看下tagStore是什么。下面是个人在机器上做测试用的一些镜像

 

tagStore保存了当前可以运行的镜像信息。

下面我们详细看下tagStore

代码在docker\graph\tags.go

 

这里面有一个Repositories,是一个map的map,最外层的key是Repository,里面的则是tag

 

先看初始化

这个是加载文件。

如果文件不存在则保存文件。

这里的加载和保存都是json的文件的操作

 

下面是向Engine注册handler

这里注册了很多的handler

那么下面我们详细的介绍几个

 

5.1、tag

tag是对image重新打一个新tag

解析参数,然后调用了Set函数

先查找image,然后更具repoName查找对应的Repositorie,如果有则返回,没有则保存一个新的Repositorie,并将tagStore保存到文件

 

5.2、 image_get

image_get调用的是CmdGet,用于获取image信息

首先查找image,然后将image信息输出。这个比较简单

 

5.3、image_inspect

image_inspect调用的CmdLookup,输出的是image的spect信息

这里先查找,然后输出信息。

下面是查找image

先从store查找,查找不到,则从graph中获取

 

最终的都是从graph中获取

 

5.4、push

push和pull是类似的,这里就介绍一个

这里调用了poolAdd防止重入

这里涉及到另外一个模块registry的操作,就不深入跟了。大致的过程就是,通过poolAdd,防止重入,然后将image的信息,发送到registry中

 

 

poolAdd,通过一个map来防止重入,返回了一个chan。

chan会在调用poolRemove中close掉

 

 

5.5、小结

tagStore提供了一些image的操作,像Engine注册了handler

 

6、总结

在本文中,简单的介绍了,关于image的一些模块,模块之间的相互配合,完成相对于的image操作。

文中如果有哪里讲解的不对的地方,还请见谅,望指正。

 

 

 

龚浩华

QQ 月牙寂 道长 29185807

2016年5月4日

(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

 

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值