
先說結(jié)論:Docker容器的本質(zhì)是一個(gè)特殊的進(jìn)程。
學(xué)過操作系統(tǒng)的大家應(yīng)該知道進(jìn)程其實(shí)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位。
比如我們電腦上運(yùn)行的微信程序是一個(gè)進(jìn)程,運(yùn)行的開發(fā)工具(intellj idea)也是一個(gè)進(jìn)程。其實(shí)在操作系統(tǒng)視角來看,處于運(yùn)行時(shí)的Docker容器本身也是一個(gè)進(jìn)程,只是這個(gè)進(jìn)程比較特殊,下面我們就來說說他特殊在哪里
針對(duì)Linux容器來說,為了實(shí)現(xiàn)容器間資源隔離與限制,其對(duì)容器進(jìn)程做了下面的處理
第一:其使用Linux提供的NameSpace技術(shù)來修改Docker容器進(jìn)行時(shí)視圖,實(shí)現(xiàn)每個(gè)容器有相互隔離的網(wǎng)絡(luò)命名空間、進(jìn)程空間等;比如你在Docker容器內(nèi)查看進(jìn)程列表,會(huì)發(fā)現(xiàn)容器自身是1號(hào)進(jìn)程,其并看不到操作系統(tǒng)視角的其他進(jìn)程,比如每個(gè)docker容器看到的都是各自獨(dú)立的文件系統(tǒng),相互之間不會(huì)影響。
第二:使用Linux提供的NameSpace技術(shù)僅僅解決了容器之間的隔離問題,但是還是沒法控制每個(gè)容器對(duì)資源使用的限制問題,比如還是無法控制每個(gè)容器可以使用多少cpu和內(nèi)存等資源。所以還需要使用Linux的Cgroup技術(shù)來實(shí)現(xiàn)容器對(duì)資源使用的限制。Linux Cgroups 的全稱是 Linux Control Group。它最主要的作用,就是限制一個(gè)進(jìn)程組能夠使用的資源上限,包括 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)帶寬等等。
總結(jié):針對(duì)Linux內(nèi)核的容器,比如Docker容器來說,其本質(zhì)是一個(gè)特殊的進(jìn)程。相比其他進(jìn)程其特殊在基于NameSpace技術(shù)實(shí)現(xiàn)了進(jìn)程的視圖的隔離,基于Cgroup技術(shù)實(shí)現(xiàn)了資源使用的限制,從而實(shí)現(xiàn)了容器之間的資源隔離與限制。