上節學習瞭如何限制容器對內存的使用,本節咱們來看CPU。docker
默認設置下,全部容器能夠平等地使用 host CPU 資源而且沒有限制。ubuntu
Docker 能夠經過 -c
或 --cpu-shares
設置容器使用 CPU 的權重。若是不指定,默認值爲 1024。學習
與內存限額不一樣,經過 -c
設置的 cpu share 並非 CPU 資源的絕對數量,而是一個相對的權重值。某個容器最終能分配到的 CPU 資源取決於它的 cpu share 佔全部容器 cpu share 總和的比例。線程
換句話說:經過 cpu share 能夠設置容器使用 CPU 的優先級。code
好比在 host 中啓動了兩個容器:內存
docker run --name "container_A" -c 1024 ubuntu資源
docker run --name "container_B" -c 512 ubuntu容器
container_A 的 cpu share 1024,是 container_B 的兩倍。當兩個容器都須要 CPU 資源時,container_A 能夠獲得的 CPU 是 container_B 的兩倍。二維碼
須要特別注意的是,這種按權重分配 CPU 只會發生在 CPU 資源緊張的狀況下。若是 container_A 處於空閒狀態,這時,爲了充分利用 CPU 資源,container_B 也能夠分配到所有可用的 CPU。im
下面咱們繼續用 progrium/stress 作實驗。
啓動 container_A,cpu share 爲 1024:
--cpu
用來設置工做線程的數量。由於當前 host 只有 1 顆 CPU,因此一個工做線程就能將 CPU 壓滿。若是 host 有多顆 CPU,則須要相應增長 --cpu
的數量。
啓動 container_B,cpu share 爲 512:
在 host 中執行 top
,查看容器對 CPU 的使用狀況:
container_A 消耗的 CPU 是 container_B 的兩倍。
如今暫停 container_A:
top
顯示 container_B 在 container_A 空閒的狀況下可以用滿整顆 CPU:
CPU限額就討論到這裏,下一節咱們將學習如何限制容器對 Block IO 帶寬資源的使用。