docker不能對(duì)“硬盤I/O讀寫”進(jìn)行隔離,但可以對(duì)文件系統(tǒng)、網(wǎng)絡(luò)(Network)、進(jìn)程間的通信、針對(duì)權(quán)限的用戶和用戶組、進(jìn)程內(nèi)的PID和宿主機(jī)的PID、主機(jī)名與域名等進(jìn)行隔離。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、docker-1.13.1版、Dell G3電腦。
Docker可以控制很多資源,目前還不能對(duì)“硬盤I/O讀寫”資源進(jìn)行隔離。
硬盤I/O是指硬盤的輸入和輸出(Input和Output的縮寫)。就是發(fā)指令,從磁盤讀取某段扇區(qū)的內(nèi)容。指令一般是通知磁盤開始扇區(qū)位置,然后給出需要從這個(gè)初始扇區(qū)往后讀取的連續(xù)扇區(qū)個(gè)數(shù),同時(shí)給出動(dòng)作是讀,還是寫。
對(duì)于磁盤I/O資源來說,考量的參數(shù)是容量和讀寫速度,因此對(duì)容器的磁盤限制也應(yīng)該從這兩個(gè)維度出發(fā)。目前Docker 支持對(duì)磁盤的讀寫速度進(jìn)行限制,但是并沒有方法能限制容器能使用的磁盤容量(一旦磁盤 mount 到容器里,容器就能夠使用磁盤的所有容量)。
那么docker可以對(duì)哪些資源進(jìn)行隔離?
Docker通過namespace實(shí)現(xiàn)了資源隔離,通過cgroups實(shí)現(xiàn)了資源限制,通過*寫時(shí)復(fù)制機(jī)制(copy-on-write)*實(shí)現(xiàn)了高效的文件操作。
namespace可以隔離哪些
-
一個(gè)容器要想與其他容器互不干擾需要能夠做到:
-
文件系統(tǒng)需要是被隔離的
-
網(wǎng)絡(luò)也是需要被隔離的
-
進(jìn)程間的通信也要被隔離
-
針對(duì)權(quán)限,用戶和用戶組也需要隔離
-
進(jìn)程內(nèi)的PID也需要與宿主機(jī)中的PID進(jìn)行隔離
-
容器也要有自己的主機(jī)名
有了以上的隔離,我們認(rèn)為一個(gè)容器可以與宿主機(jī)和其他容器是隔離開的。
推薦學(xué)習(xí):《docker視頻教程》