docker daemon的意思为:Docker的守护进程;daemon的主要功能包括镜像管理、镜像构建、REST API、身份验证、安全、核心网络以及编排。
本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。
Docker Daemon
Daemon是Docker的守护进程,Docker Client通过命令行与Docker Damon通信,完成Docker相关操作。
daemon的主要功能包括镜像管理、镜像构建、REST API、身份验证、安全、核心网络以及编排。
工作机制
Docker Daemon可以认为是通过Docker Server模块接受Docker Client的请求,并在Engine中处理请求,然后根据请求类型,创建出指定的Job并运行,运行过程的作用有以下几种可能:向Docker Registry获取镜像,通过graphdriver执行容器镜像的本地化操作,通过networkdriver执行容器网络环境的配置,通过execdriver执行容器内部运行的执行工作等。
修改Docker Daemon
Docker Daemon有不同的修改方式:命令行修改,修改启动项,修改配置文件。
-
其中仅仅只是研究或一次使用Docker Daemon的不同选项时,可以通过命令行的方式,此时Docker Daemon运行在前端,日志直接打印在终端上;
-
当Docker Daemon的配置很稳定,不常修改时,可以将Docker Daemon的选项放在启动项中;
-
当Docker Daemon的配置需要定时修改时,就可以把变化的选项放在配置文件中。
启动流程
由于Docker Daemon和Docker Client的启动都是通过可执行文件docker来完成的,因此两者的启动流程非常相似。Docker可执行文件运行时,运行代码通过不同的命令行flag参数,区分两者,并最终运行两者各自相应的部分。
启动Docker Daemon时,一般可以使用以下命令:docker –daemon=true; docker –d; docker –d=true等。接着由docker的main()函数来解析以上命令的相应flag参数,并最终完成Docker Daemon的启动。
通过Docker Daemon的流程图,可以得出一个这样的结论:有关Docker Daemon的所有的工作,都被包含在mainDaemon()方法的实现中。
宏观来讲,mainDaemon()完成创建一个daemon进程,并使其正常运行。
从功能的角度来说,mainDaemon()实现了两部分内容:第一,创建Docker运行环境;第二,服务于Docker Client,接收并处理相应请求。
从实现细节来讲,mainDaemon()的实现过程主要包含以下步骤:
1)daemon的配置初始化(这部分在init()函数中实现,即在mainDaemon()运行前就执行,但由于这部分内容和mainDaemon()的运行息息相关,故可认为是mainDaemon()运行的先决条件;
2)命令行flag参数检查;
3)创建engine对象;
4)设置engine的信号捕获及处理方法;
5)加载builtins;
6)使用goroutine加载daemon对象并运行;
7)打印Docker版本及驱动信息;
8)Job之”serveapi”的创建与运行。
推荐学习:《docker视频教程》