文章目錄
1、首先先看看怎樣查看這三項指標
一、先進入docker容器裏
docker exec -it b6bac438271d /bin/bash
二、查看磁盤
三、查看內存
四、查看cpu
物理cpu:主板上實際插入的cpu數量,能夠數不重複的 physical id 有幾個(physical id)
cpu核數:單塊CPU上面能處理數據的芯片組的數量
邏輯cpu:通常狀況下,邏輯cpu=物理CPU個數×每顆核數算法
1.物理cpu數:[root@server ~]# grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l 2.cpu核數:[root@server ~]# grep 'cpu cores' /proc/cpuinfo|uniq|awk -F ':' '{print $2}'
注:top命令輸入後,出現以下界面,再按1,能夠看邏輯cpu,及每一個核的cpu使用狀況。docker
注:上面這樣子看的和在宿主機上經過這些命令看,你會發現docker容器和宿主機都是同樣的,這是爲何呢?
首先咱們要知道,docker默認容器和宿主機時共享全部的cpu、內存、磁盤資源的,因此這樣看都是同樣的。爲了避免讓個別容器由於受到攻擊,大肆佔用資源,形成其餘容器也崩潰,咱們須要對每一個容器的資源多少進行限制。那麼就有這兩個問題:怎樣看準確的呢?怎樣對容器使用的這些資源進行限制呢?shell
2、怎樣準確查看每一個容器的資源消耗狀況呢?
查看磁盤:只有上面這樣子看!
查看每一個容器的內存、cpu消耗狀況:centos
#宿主機上輸入命令 docker stats #這是實時查看cpu、內存消耗狀況 docker stats --no-stream #查看瞬間的cpu、內存消耗狀況
3、怎樣對每一個容器使用的這些資源進行限制呢?
若是咱們買過雲主機,那麼每一個雲主機的磁盤、cpu、內存都有明確的配置,好比我買的阿里雲主機就是40G的硬盤、1核cpu、2G內存。咱們接下來就是須要對容器進行這樣的限制。bash
一、cpu、內存限制
docker run -itd --cpuset-cpus=0-0 -m 4MB docker.io/jdeathe/centos-ssh /bin/bash --cpuset-cpus:設置cpu的核數,0-0、1-一、2-2...(這種是綁定cpu,把本虛擬機綁定在一個邏輯cpu上);0-一、0-二、0-3和0,一、0,二、0,3(這兩種形式都是指定多個邏輯cpu,每次隨機使用一個邏輯cpu,至關因而共享cpu) #注意:一個docker容器綁定一個邏輯cpu便於監控容器佔用cpu的狀況;而共享cpu能夠更好利用cpu資源,並且要選好cpu調度算法! -m:設置內存的大小
我設置兩核cpu,它報錯了:
報錯的意思是:守護進程的錯誤響應:請求的CPU不可用-請求的0-1,可用:0。
說明我們的vmware虛擬機建立時只給了1核,因此這裏不能給兩核!
查看cpu、內存是否限制成功:
內存、cpu限制成功!這個查看容器的cpu核數的方式不知道應該怎樣查看!我後面加了cpu,而後試了下,top命令和經過看
cpuinfo文件
都不能查看出一個容器佔用的cpu資源實際狀況!ssh
二、磁盤大小限制
(1)備份鏡像、容器文件
- 備份鏡像
docker save docker.io/centos >/root/centos-image.tar
- 備份docker容器
先docker commit把容器提交成鏡像,再備份鏡像便可
(2)修改docker配置文件
docker配置文件:/etc/sysconfig/docker(注意不是docker-storage文件)中,OPTIONS參數後面添加以下代碼:ui
OPTIONS='--storage-opt overlay2.size=40G'
重啓docker,報錯:阿里雲
systemctl status docker.service -l
注:project Quota(目錄配額)
解釋:Overlay2 Docker磁盤驅動模式,若是要調整其大小,須要讓Linux文件系統設置爲xfs,而且支持目錄級別的磁盤配額功能;spa
(3)接下來咱們就作支持目錄級別的磁盤配額功能
首先理解什麼叫支持目錄的磁盤配額?
答:就是支持在固定大小目錄中分配磁盤大小。目錄有大小怎麼理解?將一個固定大小的硬盤掛載到此目錄,這個目錄的大小就是硬盤的大小。而後目錄可分配指定大小的硬盤資源給其下的文件.net
-
添加新的硬盤
注:/dev/sdb就是我添加的磁盤!
-
格式化硬盤爲xfs文件系統格式
mkfs.xfs -f /dev/sdb
- 建立data目錄,後續將做爲docker數據目錄;
mkdir /data/ -p
- 掛載data目錄,而且開啓磁盤配額功能(默認xfs支持配額功能)
mount -o uquota,prjquota /dev/sdb /data/ #把/dev/sdb這塊新建硬盤掛載到/data/,且讓/data/目錄分別支持用戶級別和目錄級別的配額!其實只須要prjquota就好了,不須要uquota。
上圖證實/data目錄的大小已經被限制!!
那麼支持目錄的磁盤目錄配額就是,支持將20G的/data/目錄可分配這20G磁盤大小!
- 查看配額-配置詳情,命令以下:
xfs_quota -x -c 'report' /data/
運行了xfs_quota這個命令後,顯示如上,說明,/data/這個目錄已經支持了目錄配額功能!
(4)從/data/docker/做軟連接到/var/lib下
mkdir /data/docker mv /var/lib/docker/* /data/docker/ rm -rf /var/lib/docker/ ln -s /data/docker /var/lib/
這個樣子,不支持目錄級別的磁盤配額功能的/var/lib/docker/目錄,就變成支持目錄級別的磁盤配額功能軟連接到/data/docker/目錄下的/var/lib/docker/目錄
(5)docker load加載備份的鏡像,並運行容器,查看磁盤大小
docker load < /root/centos-image.tar docker run -itd --privileged --cpuset-cpus=0-1 -m 4048M docker.io/centos /bin/bash
磁盤大小限制爲10G成功!
內存大小限制爲4G成功!
三、最後注意點
不管是磁盤大小的限制、仍是cpu、內存,它們都不能超出實際擁有的大小! 好比我這臺vmware的內存是4G、cpu兩核、硬盤20G(由於這裏可配額的/data/目錄就只有20G),由於centos系統運行還須要佔部份內存,因此容器指定內存最好不要超過3G,cpu不能超過兩核(即0-0、1-1;0-1均可以)、硬盤不能超過20G(最好在15G如下)