Docker引擎是用來運(yùn)行和管理容器的核心軟件,其主要的組件構(gòu)成有:Docker客戶端(Docker Client)、Docker守護(hù)進(jìn)程(Docker deamon)、containerd和runc。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、docker-1.13.1版、Dell G3電腦。
1. Docker引擎簡介
-
Docker引擎是用來運(yùn)行和管理容器的核心軟件
-
Docker 引擎由許多專用的工具協(xié)同工作,從而可以創(chuàng)建和運(yùn)行容器,例如 API、執(zhí)行驅(qū)動、運(yùn)行時(shí)、shim 進(jìn)程等。
- Docker引擎主要的組件構(gòu)成:Docker客戶端(Docker Client), Docker守護(hù)進(jìn)程(Docker deamon),containerd以及runc。
2. Docker引擎詳解
- Docker首次發(fā)布時(shí),由兩個核心組件構(gòu)成:LXC和Docker daemon。
- Docker daemon是單一的二進(jìn)制文件,包含諸如Docker客戶端,Docker API,容器運(yùn)行時(shí),鏡像構(gòu)建等。
- LXC提供了對諸如命名空間和控制組(CGroup)等基礎(chǔ)工具的操作能力,它們是基于Linux內(nèi)核的容器虛擬化技術(shù)。在 Docker 0.9 版本中,Libcontainer 取代 LXC 成為默認(rèn)的執(zhí)行驅(qū)動。
2.1. Docker daemon
- Docker daemon整體性帶來的越來越多的問題:
- 難于變更
- 運(yùn)行越來越慢
- 這并非生態(tài)公司所期望的
- daemon使用一種CRUD風(fēng)格的API,通過gRPC與containerd進(jìn)行通信
2.2. runc
- runc實(shí)質(zhì)上是一個輕量級的,針對Libcontainer進(jìn)行了包裝的命令行交互工具。
- runc作用:創(chuàng)建容器
2.3. containerd
- 主要作用:容器的生命周期管理–start|stop|pause|rm…
2.4. shim
- shim是實(shí)現(xiàn)無daemon的容器不可或缺的工具,runc每次創(chuàng)建新容器,都會fork一個新的runc實(shí)例,一旦容器創(chuàng)建完畢,對應(yīng)的runc進(jìn)程就會退出。
- 一旦父進(jìn)程runc退出,相關(guān)聯(lián)的container-shim進(jìn)程就會成為容器的父進(jìn)程
- shim的部分職責(zé):
- 保持所有STDIN和STDOUT流是開啟狀態(tài),從而當(dāng)daemon重啟的時(shí)候,容器不會因?yàn)楣艿赖年P(guān)閉而終止。
- 將容器的退出狀態(tài)反饋給daemon。
2.5. 在Linux上的實(shí)現(xiàn)
- dockerd(Docker daemon), docker-containerd(containerd), docker-containerd-shim(shim)和docker-runc(runc)都是由單獨(dú)的二進(jìn)制實(shí)現(xiàn)。
2.6. daemon的作用
- 主要功能:鏡像管理,鏡像構(gòu)建,REST API, 身份驗(yàn)證,安全,核心網(wǎng)絡(luò)以及編排。
推薦學(xué)習(xí):《docker視頻教程》