docker daemon介绍

docker daemon介绍

Docker客户端连接远程Docker服务

docker daemon的意思为: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的启动。

1.png

通过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”的创建与运行。