东西太多了,大体过了一下,感觉会少了很多东西。有一些三方库,也没去看库怎么用。就看函数名大体猜一下功能。
完全就是从main函数一步一步往下看,这种看法就是缺少一个大局的认识,开始会有很多不理解的做法。
cmd/dockerd/docker.go
reexec.Init()
必须要提前调用的方法,用来初始化。如果初始化过了就会返回true,main函数也退出了。
判断是否调用过,就是看看registeredInitializers里有没有os.Args[0]的key。
如果有调用value,没有直接返回false,接着走main函数
具体value是个啥函数,慢慢看.里边还有个Register(函数用来往registeredInitializers里添加值。
cmd := newDaemonCommand()
cmd.Execute()
这里一看就跟client的结构一样,突然就感觉好看多了。。
daemonOptions
daemon.NewConfig() 返回一个Config,所有配置应该都在这,太多了,也看不到啥意思先过了。
cliflags.NewCommonOptions() 对应client TLS相关的东西,这里一样。
其他都一样。
opts.daemonConfig.InstallFlags(flags)
定义都有哪些参数,太多不看,在help命令里应该是有的。配置了对应的Config里边的字段。
看看return runDaemon(opts)
daemonCli := NewDaemonCli() 返回一个DaemonCli
type DaemonCli struct {
*daemon.Config
configFile *string
flags *pflag.FlagSet
api *apiserver.Server
d *daemon.Daemon
authzMiddleware *authorization.Middleware // authzMiddleware enables to dynamically reload the authorization plugins
}
err = daemonCli.start(opts) 这里流程就完了。详细看看start是干嘛的
上一篇: Docker源码阅读3-client命令
下一篇: freebsd pkg升级问题报错
0 Responses so far.