容器資源限制
一個(gè) docker host 上會(huì)運(yùn)行若干容器,每個(gè)容器都需要 CPU瑟慈、內(nèi)存和 IO 資源桃移。對(duì)于 KVM屋匕,VMware 等虛擬化技術(shù)葛碧,用戶(hù)可以控制分配多少 CPU、內(nèi)存資源給每個(gè)虛擬機(jī)过吻。對(duì)于容器进泼,Docker 也提供了類(lèi)似的機(jī)制避免某個(gè)容器因占用太多資源而影響其他容器乃至整個(gè) host 的性能。
內(nèi)存限額
與操作系統(tǒng)類(lèi)似纤虽,容器可使用的內(nèi)存包括兩部分:物理內(nèi)存和 swap乳绕。 Docker 通過(guò)下面兩組參數(shù)來(lái)控制容器內(nèi)存的使用量。
-m 或 --memory:設(shè)置內(nèi)存的使用限額逼纸,例如 100M, 2G洋措。
--memory-swap:設(shè)置 內(nèi)存+swap 的使用限額。
ps:
默認(rèn)參數(shù)都為 -1杰刽,即對(duì)容器內(nèi)存和 swap 的使用沒(méi)有限制菠发。
如果在啟動(dòng)容器時(shí)只指定 -m 而不指定 --memory-swap王滤,那么 --memory-swap 默認(rèn)為 -m 的兩倍,比如:docker run -it -m 200M ubuntu滓鸠,即容器最多使用 200M 物理內(nèi)存和 200M swap雁乡。
CPU限額
默認(rèn)設(shè)置下,所有容器可以平等地使用 host CPU 資源并且沒(méi)有限制糜俗。
Docker 可以通過(guò) -c 或 --cpu-shares 設(shè)置容器使用 CPU 的權(quán)重踱稍。如果不指定,默認(rèn)值為 1024悠抹。
與內(nèi)存限額不同珠月,通過(guò) -c 設(shè)置的 cpu share 并不是 CPU 資源的絕對(duì)數(shù)量,而是一個(gè)相對(duì)的權(quán)重值楔敌。某個(gè)容器最終能分配到的 CPU 資源取決于它的 cpu share 占所有容器 cpu share 總和的比例桥温。
換句話(huà)說(shuō):通過(guò) cpu share 可以設(shè)置容器使用 CPU 的優(yōu)先級(jí)。
需要特別注意的是梁丘,這種按權(quán)重分配 CPU 只會(huì)發(fā)生在 CPU 資源緊張的情況下侵浸。如果 container_A 處于空閑狀態(tài),這時(shí)氛谜,為了充分利用 CPU 資源掏觉,container_B 也可以分配到全部可用的 CPU。
Block IO限制
默認(rèn)情況下值漫,所有容器能平等地讀寫(xiě)磁盤(pán)澳腹,可以通過(guò)設(shè)置 --blkio-weight 參數(shù)來(lái)改變?nèi)萜?block IO 的優(yōu)先級(jí)。
--blkio-weight 與 --cpu-shares 類(lèi)似杨何,設(shè)置的是相對(duì)權(quán)重值酱塔,默認(rèn)為 500。
限制 bps 和 iops
bps 是 byte per second危虱,每秒讀寫(xiě)的數(shù)據(jù)量羊娃。
iops 是 io per second,每秒 IO 的次數(shù)埃跷。
可通過(guò)以下參數(shù)控制容器的 bps 和 iops:
--device-read-bps蕊玷,限制讀某個(gè)設(shè)備的 bps。
--device-write-bps弥雹,限制寫(xiě)某個(gè)設(shè)備的 bps垃帅。
--device-read-iops,限制讀某個(gè)設(shè)備的 iops剪勿。
--device-write-iops贸诚,限制寫(xiě)某個(gè)設(shè)備的 iops。