- Docker源碼分析
- 孫宏亮
- 404字
- 2018-12-31 20:27:05
3.3 mainDaemon()的具體實現
Docker Daemon的啟動流程圖展示了DockerDaemon的從無到有。通過分析流程圖,我們可以得出一個這樣的結論:區分Docker Daemon與Docker Client的關鍵在于flag參數flDaemon的值。一旦*flDaemon的值為真,則代表docker二進制需要啟動的是Docker Daemon。有關Docker Daemon的所有的工作,都被包含在函數mainDaemon()的具體實現中。
宏觀來講,mainDaemon()的使命是:創建一個守護進程,并保證其正常運行。
從功能的角度來說,mainDaemon()實現了兩部分內容:第一,創建Docker運行環境;第二,服務于Docker Client,接收并處理相應請求(完成Docker Server的初始化)。
從實現細節來分析,mainDaemon()的實現流程主要包含以下步驟:
1)daemon的配置初始化。這部分在init()函數中實現,即在mainDaemon()運行前就執行,但由于這部分內容和mainDaemon()的運行息息相關,可以認為是mainDaemon()運行的先決條件。
2)命令行flag參數檢查。
3)創建engine對象。
4)設置engine的信號捕獲及處理方法。
5)加載builtins。
6)使用goroutine加載daemon對象并運行。
7)打印Docker版本及驅動信息。
8)serveapi的創建與運行。
對于以上內容,本章將一一深入分析。