Docker底層實(shí)現(xiàn)

2018-08-04 18:00 更新

Docker 底層的核心技術(shù)包括 Linux 上的名字空間(Namespaces)、控制組(Control groups)、Union 文件系統(tǒng)(Union file systems)和容器格式(Container format)。

我們知道,傳統(tǒng)的虛擬機(jī)通過在宿主主機(jī)中運(yùn)行 hypervisor 來模擬一整套完整的硬件環(huán)境提供給虛擬機(jī)的操作系統(tǒng)。虛擬機(jī)系統(tǒng)看到的環(huán)境是可限制的,也是彼此隔離的。 這種直接的做法實(shí)現(xiàn)了對(duì)資源最完整的封裝,但很多時(shí)候往往意味著系統(tǒng)資源的浪費(fèi)。 例如,以宿主機(jī)和虛擬機(jī)系統(tǒng)都為 Linux 系統(tǒng)為例,虛擬機(jī)中運(yùn)行的應(yīng)用其實(shí)可以利用宿主機(jī)系統(tǒng)中的運(yùn)行環(huán)境。

我們知道,在操作系統(tǒng)中,包括內(nèi)核、文件系統(tǒng)、網(wǎng)絡(luò)、PID、UID、IPC、內(nèi)存、硬盤、CPU 等等,所有的資源都是應(yīng)用進(jìn)程直接共享的。 要想實(shí)現(xiàn)虛擬化,除了要實(shí)現(xiàn)對(duì)內(nèi)存、CPU、網(wǎng)絡(luò)IO、硬盤IO、存儲(chǔ)空間等的限制外,還要實(shí)現(xiàn)文件系統(tǒng)、網(wǎng)絡(luò)、PID、UID、IPC等等的相互隔離。 前者相對(duì)容易實(shí)現(xiàn)一些,后者則需要宿主機(jī)系統(tǒng)的深入支持。

隨著 Linux 系統(tǒng)對(duì)于名字空間功能的完善實(shí)現(xiàn),程序員已經(jīng)可以實(shí)現(xiàn)上面的所有需求,讓某些進(jìn)程在彼此隔離的名字空間中運(yùn)行。大家雖然都共用一個(gè)內(nèi)核和某些運(yùn)行時(shí)環(huán)境(例如一些系統(tǒng)命令和系統(tǒng)庫),但是彼此卻看不到,都以為系統(tǒng)中只有自己的存在。這種機(jī)制就是容器(Container),利用名字空間來做權(quán)限的隔離控制,利用 cgroups 來做資源分配。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)