\SOURCES\docker-engine\cli\cobraadaptor\adaptor.go
Daemon为Docker守护进程,提供Server功能,负责处理Docker相关请求
~/docker/SOURCES/docker-engine/cmd/dockerd/docker.go cmd下面有2个文件夹,docker是Client入口,dockerd是Daemon入口
调用链:
-> main() #入口
-> daemonCli.start() [daemon.go]
1. apiserver.New() 启动一个apiserver监听端口,
2. new了service和libcontainer,然后调用
3. daemon.NewDaemon() 新建Daemon
4. initRouter() 新建请求路由,路由来选择docker命令的执行
-> NewDaemon() 新建一个Daemon,各种初始化
-> d.restore():
1. 初始化了本地的docker容器;
2. daemon.initNetworkController() 初始化网络控制器
-> initBridgeDriver()
-> NewNetwork()
-> addNetwork()
-> CreateNetwork()
-> createNetwork()
-> setupIPTables()
3. 初始化挂载点
->
Daemon中保存了所有容器的列表,在新建Daemon的时候内存中读取
d.containers = container.NewMemoryStore()
Docker给每一个容器保存了配置信息,位于
/var/lib/docker/containers/$ID/config.v2.json
通过包gorilla/mux,创建了一个mux.Router,提供请求的路由功能。在Golang中,gorilla/mux是一个强大的URL路由器以及调度分发器,该mux.Router中添加了众多的路由项,每一个路由项由HTTP请求方法(PUT、POST、GET或DELETE)、URL、Handler三部分组成
docker-engine\api\server\router\container\container.go
-> initRouter()
1. 里面对container,volume等分别NewRouter()
2. s.InitRouter() -> s.createMux() 创建路由分发器
-> NewRouter() #每个类型都有自己的NewRouter函数,下同
-> r.initRoutes() # 里面把对应restful转换为操作执行