docker--資源控制
概述
由於一臺主機放多個容器,默認情況下,docker 沒有對容器鏡像硬件資源做限制,當容器負載過高的時候會佔用宿主機的資源,所以需要對容器的資源設置一個上限,可以從網絡資源,CPU,I/O,內存這些方面來進行限制。
一、網絡資源控制
安裝Docker時,它會自動創建三個網絡,bridge(創建容器默認連接到此網絡),none,host.
host (僅主機模式):容器將不會虛擬自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。
優勢:網絡性能比較好,但是網絡的隔離性不好
Container(容器模式):創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP,端口範圍
None:該模式關閉了容器的網絡功能。
Bridge (橋接模式):此模式會爲每一個容器分配,設置IP等,並將容器連接到一個docker 0 虛擬網橋,通過docker 0 網橋以及IPtable nat表配置與宿主機通信。
網絡資源管理命令
【1】查看網絡模式
docker network ls
【2】使用橋接模式創建
docker run -itd --name test1 --network bridge --ip 127.17.0.10 centos:7 /bin/bash
//會發現使用bridge無法支持指定IP
// 可以生成鏡像和容器 但是無法開啓容器
// 如果不加 --ip IP地址 是可以生成容器和鏡像的 容器是啓動狀態
//進容器 發現沒有IP地址 可以先裝一個 yum install net-tools -y,在查詢IP地址 就是發現有一個
【3】自定義網絡IP
docker network create --subnet=網段/24 名字
docker network create --subnet=172.18.0.0/16 mynetwork
//最後的mynetwork可以按個人喜歡命名
給容器test3固定mynetwork的網段IP地址
docker run -itd --name test3 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
二、CPU使用率
cd /sys/fs/cgroup/cpu/docker/ 可以看到所有容器的信息。
【1】限定CPU使用超過20%
CPU進程數爲100000,那麼CPU的20%爲20000
cpu-quota:指定cpu的使用上限的百分比
docker run -itd --name test1 --cpu-quota 20000 centos:7 /bin/bash
-i:表示輸入 -t:表示綁定終端
或者
echo 20000 > /sys/fs/cgroup/cpu/docker/容器ID號/cpu.cfs_quota_us
【2】按比例分配CPU
cpu-shares:
cpu資源提供一組容器使用,組內的容器按比例使用cpu資源,cpu資源被負載打的容器佔用(按照壓縮比例分配),當空閒進行運行起來時,cpu資源會被分配到其他容器
創建兩個容器爲c1和c2,若只有這兩個容器,設置容器的權重,使得c1和c2的CPU資源佔比爲33.3%和66.7%
docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7
驗證:分別進入容器中,安裝兩個軟件
yum install epel-release -y
yum install stress -y
stress -c 4 //產生四個CPU線程
在另外一個終端頁面驗證CPU百分比,可以看看到c2的cpu是c1的兩倍
docker stats
//可以看到容器的百分比
【3】限制容器使用指定的CPU
cpuset-cpus:指定容器只能運行在那個cpu核心上(綁定cpu);核心使用0,1,2,3編號
docker run -itd --name test2 --cpuset-cpus 1,3 centos:7 /bin/bash
//進容器,安裝軟件
yum install epel-release -y
yum install stress -y
stress -c 4 //產生四個CPU線程
//驗證方法:
//開啓另一個終端輸入:top 按 1 檢查
【4】內存使用限制
docker run -itd --name test3 -m 512m centos:7
驗證:
另一個終端查看容器狀態 docker stats
【5】磁盤I/O讀寫優化
--device-read-bps:限制讀某個設備的bps(數據量)
列:docker run -d --device-read-bps /dev/sda:30M centos:7
--device-write-bps:限制寫入某個設備的bos(數據量)
列:docker run -d --device-write-bps /dev/sda:30M centos:7
--device-read-iops:限制讀某個設備的iops(次數)
--device-write-iops:限制寫入某個設備的iops(次數)