內存分配
-m 或者--memory :分配內存
--memory-swap:分配臨時內存
docker run -it -m 200M --memory-swap=400M ubuntu :給ubuntu分配200兆內存和400M臨時內存,默認分配可調控內存不能小于內存分配額,如果只給-m的參數(shù),則memory-swap默認是兩倍。
壓力測試
命令:progrium/stress
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-byte 280M
--vm 分配一個線程
--vm-byte 線程的內存大小
--cpu 分配cpu數(shù)量
這里解釋一下關于壓力測試progrium/stress,他不是跑在docker中的,而是跑在host上面。而且這里有個坑,我查閱書籍的時候發(fā)現(xiàn)書上對這點都沒有細致講解,僅僅打印一條命令。讓我以為他們之間內部是有某種聯(lián)系將壓測是打在了docker上面,其實不是。progrium只是代替docker顯示數(shù)據(jù)跑滿的情況下顯示數(shù)據(jù)而已
cpu資源分配
默認情況下,所有docker都不會對cpu進行搶占,但是呢如果出現(xiàn)cpu吃緊,每個docker都去搶占資源了,所以這里docker研發(fā)者也是考慮到位了的
-c 或者 --cpu-share : 進行配置權重分配
docker run --name " a" -c 1024 ubuntu docker run --name "b" -c 512 ubuntu
這里解釋一下:當cpu空閑是,這個分配時不起作用的,因為如果b容器運行資源/訪問比較大,就很可能所占的cpu是大于a的,但是當兩個訪問都大的時候,a就是兩倍b的cpu資源。1024只是一個量的比較,不做具體數(shù)值。
測試:
progrium 很直觀的能看見docker運行情況,但是網上都沒什么教程。我們這里來測試一下。
docker run --name "a" -c 1024 -it progrium/stress --cpu 2
docker run --name "b" -c 512-it progrium/stress --cpu 2
此時你去細看的話(用top)你就會發(fā)現(xiàn)兩核的cpu幾乎都被跑滿,而且a的占用量是b的兩倍。但是如果只有a或者b在高壓的跑的話,cpu會被a或者b跑滿
Block帶寬資源分配
block io 是一種限制容器使用資源的方式,block io 指的是磁盤的讀寫,docker可以通過設置權重,限制bps,iops方式控制容器讀寫磁盤的帶寬。
--blkio-weight :和--share-cpu類似,默認值是500,通過權重來進行比較
bps:byte per second :每秒讀取數(shù)據(jù)量
iops :io per second :每秒讀取io的次數(shù)
--device-read-bps? ?/demo/a:20MB
--device-write-bps? /demo/a:20MB
--device-read-iops??/demo/a:20MB
--device-write-iops??/demo/a:20MB
示例:docker run -it --device-write-bps /demo/a:20MB ubuntu
表示次容器對容器映射目錄 即 host 的/demo/a 目錄讀寫速度限制在20mb/s
用處:一般是沒啥作用的,但是對性能有極致要求的人來說有不一樣了,如果一個數(shù)據(jù)庫的docker 和webdocker 放在同一臺host上面,那么他們的讀寫是可以進行按需求配置的