说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。
申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。
龚浩华,QQ 29185807,月牙寂 道长
第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang
在代码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
那么下面我们详细的介绍几个
tag是对image重新打一个新tag
解析参数,然后调用了Set函数
先查找image,然后更具repoName查找对应的Repositorie,如果有则返回,没有则保存一个新的Repositorie,并将tagStore保存到文件
image_get调用的是CmdGet,用于获取image信息
首先查找image,然后将image信息输出。这个比较简单
image_inspect调用的CmdLookup,输出的是image的spect信息
这里先查找,然后输出信息。
下面是查找image
先从store查找,查找不到,则从graph中获取
最终的都是从graph中获取
push和pull是类似的,这里就介绍一个
这里调用了poolAdd防止重入
这里涉及到另外一个模块registry的操作,就不深入跟了。大致的过程就是,通过poolAdd,防止重入,然后将image的信息,发送到registry中
poolAdd,通过一个map来防止重入,返回了一个chan。
chan会在调用poolRemove中close掉
tagStore提供了一些image的操作,像Engine注册了handler
在本文中,简单的介绍了,关于image的一些模块,模块之间的相互配合,完成相对于的image操作。
文中如果有哪里讲解的不对的地方,还请见谅,望指正。