本節書摘來華章計算機《容器技術系列》一書中的第3章 ,第3.1節,孫宏亮 著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
自docker誕生以來,便引領了輕量級虛拟化容器領域的技術熱潮。在這一潮流下,google、ibm、redhat等業界翹楚紛紛加入docker陣營。雖然目前docker仍主要基于linux平台,但是microsoft卻多次宣布對docker的支援,從先前宣布的azure支援docker與kubernetes,到如今宣布的下一代windows server原生态支援docker。microsoft的這一系列舉措多少喻示着向linux世界的妥協,當然這也不得不讓世人對docker的巨大影響力有重新的認識。
docker的影響力不言而喻,但如果需要深入學習docker的内部實作,最重要的就是了解docker daemon。在docker架構中,docker client通過特定的協定與docker daemon進行通信,而docker daemon主要承載了docker運作過程中的大部分工作。
docker daemon是docker架構中運作在背景的守護程序,大緻可以分為docker server、engine和job三部分。三者的關系大緻如下:docker daemon通過docker server子產品接收docker client的請求,并在engine中處理請求,然後根據請求類型,建立出指定的job并運作。由于使用者的請求不同,dockerdaemon會建立不同的job來完成任務,如:使用者發起鏡像下載下傳請求,dockerdaemon建立名為“pull”的job;使用者發起啟動容器的請求,dockerdaemon建立名為“start”的job……
docker daemon的架構如圖3-1所示。
本章從源碼的角度,主要分析docker daemon的啟動流程。由于docker daemon和docker client的啟動流程有很多的相似之處,故本章不再贅述docker daemon啟動的前期工作、flag參數的解析等内容,着重分析docker daemon啟動流程中最為重要的環節:建立daemon過程中maindaemon()的實作。
