docker daemon的意思為:Docker的守護(hù)進(jìn)程;daemon的主要功能包括鏡像管理、鏡像構(gòu)建、REST API、身份驗(yàn)證、安全、核心網(wǎng)絡(luò)以及編排。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、docker-1.13.1版、Dell G3電腦。
Docker Daemon
Daemon是Docker的守護(hù)進(jìn)程,Docker Client通過命令行與Docker Damon通信,完成Docker相關(guān)操作。
daemon的主要功能包括鏡像管理、鏡像構(gòu)建、REST API、身份驗(yàn)證、安全、核心網(wǎng)絡(luò)以及編排。
工作機(jī)制
Docker Daemon可以認(rèn)為是通過Docker Server模塊接受Docker Client的請求,并在Engine中處理請求,然后根據(jù)請求類型,創(chuàng)建出指定的Job并運(yùn)行,運(yùn)行過程的作用有以下幾種可能:向Docker Registry獲取鏡像,通過graphdriver執(zhí)行容器鏡像的本地化操作,通過networkdriver執(zhí)行容器網(wǎng)絡(luò)環(huán)境的配置,通過execdriver執(zhí)行容器內(nèi)部運(yùn)行的執(zhí)行工作等。
修改Docker Daemon
Docker Daemon有不同的修改方式:命令行修改,修改啟動項(xiàng),修改配置文件。
-
其中僅僅只是研究或一次使用Docker Daemon的不同選項(xiàng)時(shí),可以通過命令行的方式,此時(shí)Docker Daemon運(yùn)行在前端,日志直接打印在終端上;
-
當(dāng)Docker Daemon的配置很穩(wěn)定,不常修改時(shí),可以將Docker Daemon的選項(xiàng)放在啟動項(xiàng)中;
-
當(dāng)Docker Daemon的配置需要定時(shí)修改時(shí),就可以把變化的選項(xiàng)放在配置文件中。
啟動流程
由于Docker Daemon和Docker Client的啟動都是通過可執(zhí)行文件docker來完成的,因此兩者的啟動流程非常相似。Docker可執(zhí)行文件運(yùn)行時(shí),運(yùn)行代碼通過不同的命令行flag參數(shù),區(qū)分兩者,并最終運(yùn)行兩者各自相應(yīng)的部分。
啟動Docker Daemon時(shí),一般可以使用以下命令:docker –daemon=true; docker –d; docker –d=true等。接著由docker的main()函數(shù)來解析以上命令的相應(yīng)flag參數(shù),并最終完成Docker Daemon的啟動。
通過Docker Daemon的流程圖,可以得出一個這樣的結(jié)論:有關(guān)Docker Daemon的所有的工作,都被包含在mainDaemon()方法的實(shí)現(xiàn)中。
宏觀來講,mainDaemon()完成創(chuàng)建一個daemon進(jìn)程,并使其正常運(yùn)行。
從功能的角度來說,mainDaemon()實(shí)現(xiàn)了兩部分內(nèi)容:第一,創(chuàng)建Docker運(yùn)行環(huán)境;第二,服務(wù)于Docker Client,接收并處理相應(yīng)請求。
從實(shí)現(xiàn)細(xì)節(jié)來講,mainDaemon()的實(shí)現(xiàn)過程主要包含以下步驟:
1)daemon的配置初始化(這部分在init()函數(shù)中實(shí)現(xiàn),即在mainDaemon()運(yùn)行前就執(zhí)行,但由于這部分內(nèi)容和mainDaemon()的運(yùn)行息息相關(guān),故可認(rèn)為是mainDaemon()運(yùn)行的先決條件;
2)命令行flag參數(shù)檢查;
3)創(chuàng)建engine對象;
4)設(shè)置engine的信號捕獲及處理方法;
5)加載builtins;
6)使用goroutine加載daemon對象并運(yùn)行;
7)打印Docker版本及驅(qū)動信息;
8)Job之”serveapi”的創(chuàng)建與運(yùn)行。
推薦學(xué)習(xí):《docker視頻教程》