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視頻教程》