一個 docker host 上會運行若干容器,每一個容器都須要 CPU、內存和 IO 資源。對於 KVM,VMware 等虛擬化技術,用戶能夠控制分配多少 CPU、內存資源給每一個虛擬機。對於容器,Docker 也提供了相似的機制避免某個容器因佔用太多資源而影響其餘容器乃至整個 host 的性能。docker
與操做系統相似,容器可以使用的內存包括兩部分:物理內存和 swap。 Docker 經過下面兩組參數來控制容器內存的使用量。ubuntu
-m
或 --memory
:設置內存的使用限額,例如 100M, 2G。性能
--memory-swap
:設置 內存+swap 的使用限額。學習
當咱們執行以下命令:測試
docker run -m 200M --memory-swap=300M ubuntuspa
其含義是容許該容器最多使用 200M 的內存和 100M 的 swap。默認狀況下,上面兩組參數爲 -1,即對容器內存和 swap 的使用沒有限制。操作系統
下面咱們將使用 progrium/stress 鏡像來學習如何爲容器分配內存。該鏡像可用於對容器執行壓力測試。執行以下命令:線程
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280Mcode
--vm 1
:啓動 1 個內存工做線程。內存
--vm-bytes 280M
:每一個線程分配 280M 內存。
運行結果以下:
由於 280M 在可分配的範圍(300M)內,因此工做線程可以正常工做,其過程是:
分配 280M 內存。
釋放 280M 內存。
再分配 280M 內存。
再釋放 280M 內存。
一直循環......
若是讓工做線程分配的內存超過 300M,結果以下:
分配的內存超過限額,stress 線程報錯,容器退出。
若是在啓動容器時只指定 -m
而不指定 --memory-swap
,那麼 --memory-swap
默認爲 -m
的兩倍,好比:
docker run -it -m 200M ubuntu
容器最多使用 200M 物理內存和 200M swap。
內存限額就討論到這裏,下一節咱們將學習如何限制容器對 CPU 資源的使用。