Skip to content

Latest commit

 

History

History
56 lines (43 loc) · 1.8 KB

Daemon启动.md

File metadata and controls

56 lines (43 loc) · 1.8 KB

命令入口

\SOURCES\docker-engine\cli\cobraadaptor\adaptor.go

Docker Daemon

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转换为操作执行