Docker為什么這么快(四大關(guān)鍵核心原因)
Docker 的快速性是其核心優(yōu)勢(shì),以下是其快速性的4大關(guān)鍵原因@mikechen
1. 輕量級(jí)隔離:共享主機(jī)內(nèi)核,秒級(jí)啟動(dòng)
Docker 并不像虛擬機(jī)那樣模擬整套硬件并安裝操作系統(tǒng),而是采用了 操作系統(tǒng)級(jí)虛擬化:
最新文章
- 所有容器共享宿主機(jī)內(nèi)核;
- 每個(gè)容器運(yùn)行在獨(dú)立的用戶空間中;
- 利用 Linux 的 Namespace + Cgroups 實(shí)現(xiàn)進(jìn)程級(jí)隔離;
?? 容器本質(zhì)上就是一個(gè)被隔離的普通進(jìn)程,啟動(dòng)只需創(chuàng)建進(jìn)程 + 掛載文件系統(tǒng),無需啟動(dòng)內(nèi)核或服務(wù),大多數(shù)容器可以在 幾百毫秒內(nèi)啟動(dòng)。
2. 分層存儲(chǔ):UnionFS 減少冗余,加速構(gòu)建和啟動(dòng)
UnionFS 聯(lián)合文件系統(tǒng): Docker 鏡像采用分層結(jié)構(gòu),每一層都是對(duì)文件系統(tǒng)的增量修改。
UnionFS 技術(shù)將這些只讀層聯(lián)合掛載成一個(gè)統(tǒng)一的文件系統(tǒng),供容器使用。
最新文章
這樣有如下好處:
減少冗余
多個(gè)鏡像可以共享相同的底層鏡像層,只需存儲(chǔ)各自獨(dú)特的差異部分,極大地節(jié)省了磁盤空間。
加速構(gòu)建
在構(gòu)建鏡像時(shí),Docker 會(huì)緩存每一層,如果 Dockerfile 中的指令沒有改變,構(gòu)建過程可以重用之前的鏡像層,顯著加快了構(gòu)建速度。
加速啟動(dòng)
當(dāng)啟動(dòng)容器時(shí),Docker 只需要加載必要的鏡像層。
如果某些層已經(jīng)被其他容器使用,可以直接復(fù)用內(nèi)存中的緩存,無需重復(fù)加載,從而加速了容器的啟動(dòng)過程。
3. 低資源占用:只包含必要依賴,運(yùn)行效率高
Docker 容器只打包應(yīng)用程序及其必要的依賴庫、運(yùn)行時(shí)環(huán)境和配置文件。
不包含完整的操作系統(tǒng),這使得容器的體積通常比虛擬機(jī)鏡像小得多。
最新文章
由于容器只運(yùn)行應(yīng)用程序所需的組件,因此其對(duì) CPU、內(nèi)存和磁盤 I/O 等資源的消耗也遠(yuǎn)低于運(yùn)行完整操作系統(tǒng)的虛擬機(jī)。
這使得在同一臺(tái)物理機(jī)上可以運(yùn)行更多的容器,提高了資源利用率和運(yùn)行效率。
4. 高效運(yùn)行時(shí):containerd 和 runc 直接操作內(nèi)核
Docker 的運(yùn)行機(jī)制也非常高效,核心依賴兩個(gè)關(guān)鍵運(yùn)行組件:
containerd: Docker 架構(gòu)中的一個(gè)核心組件,負(fù)責(zé)管理容器的生命周期,包括創(chuàng)建、啟動(dòng)、停止、刪除等。
最新文章
runc: 一個(gè)輕量級(jí)的、符合 OCI (Open Container Initiative) 標(biāo)準(zhǔn)的容器運(yùn)行時(shí)。
runc 直接與 Linux 內(nèi)核交互,利用 Namespaces 和 Cgroups 等內(nèi)核特性來創(chuàng)建和運(yùn)行容器。
直接操作內(nèi)核: runc
作為底層的容器運(yùn)行時(shí),直接調(diào)用內(nèi)核接口來創(chuàng)建和管理容器的隔離環(huán)境和資源限制。
避免了額外的中間層開銷,從而實(shí)現(xiàn)了高效的容器運(yùn)行。