Docker命令的两种模式:client模式和daemon模式;
一、client模式
docker命令对应的源文件是docker/docker.go,使用方式如下:
docker [OPTIONS] COMMAND [arg...]
其中OPTIONS参数成为flag,任何时候执行一个docker命令时,都需要先解析flag,然后按照用户声明的COMMAND向指定的子命令执行对应的操作。
如果子命令为daemon,Docker就会创建一个运行在宿主机的daemon进程,即执行daemon模式;其余子命令都会执行client模式;
1. 解析flag信息
这里列出运行在client模式下的docker比较重要的一些flag:
Debug,对应 -D 和 --debug参数,这个flag用于启动调试模式;
LogLevel, 对应 -L 和 --log-level参数,指定日志等级;
Hosts, 对应 -H 和 --host=[]参数,对于client模式,就是指本次操作需要连接
的Docker daemon位置,而对于daemon模式,则提供所要监听的地址。
protoAddrParts, 这个信息来自与-H参数中://前后的两部分的组合,即
与Docker daemon建立通信的协议方式与socket地址
2. 创建client实例
3. 执行具体的命令
- 从命令映射到对应的方法
- 执行对应的方法,发起请求
解析传入的参数
获取与Docker daemon通信所需要的认证配置信息
根据命令业务类型,给Docker daemon发送POST、GET等请求
读取来自Docker daemon的返回结果
二、daemon模式
1. API Server的配置和初始化过程
(1)整理解析用户指定的各项参数
(2)创建PID文件
(3)加载所需的server辅助配置,包括日志、是否允许远程访问、版本以及TLS认证信息等
(4)根据上述配置,启动API Server
(5)创建daemon对象
(6)API Server中的路由表初始化
(7)设置channel、设置信号捕获
(8)API Server与上述daemon绑定,并接受client请求
(9)向宿主机守护进程发送"READY=1"信号,表示已经开始正常工作