文章目錄
一、前言
- 一臺主機可以放多個容器,默認的情況下,docker沒有對容器鏡像硬件資源的限制,但是當容器負載過高時會儘可能的佔用宿主機的資源,所以需要對容器的資源使用設置一個上限,我們可以從這些方面進行限制:網絡資源、CPU、IO、內存。
二、docker網絡資源控制
2.1、docker網絡詳解
- docker網絡有四種模式:host、container、none、bridge模式。
2.1.1、host模式
-
host:容器將不會虛擬出自己的網卡docker 0,配置自己的IP等,而是使用宿主機ens33的IP和端口。但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。
-
host最大的優勢就是網絡性能比較好,但是網絡的隔離性不好。
2.1.2、Container模式
- Container:新創建的容器和已經存在的一個容器共享一個 Network Namespace,創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口範圍。
2.1.3、none模式
none模式沒有網絡,封閉的網絡性能很好的保證容器的安全性。可以在容器創建時通過–network=none來指定。
2.1.4、Bridge 模式
Docker進程啓動時,在主機上創建一個名爲docker0的虛擬網橋,從docker0子網中分配一個IP給容器使用,並設置docker0的IP地址爲容器的默認網關。
2.2、網絡空間
在橋接模式:我們不能指定固定IP地址,但是可以自定義創建另一個網段的網絡空間來固定IP地址。
2.3、docker網絡管理命令
- 1、查看網絡模式:docker network ls
- 2、創建新的網段:docker network create --subnet=網段/24 名字
docker network create --subnet=172.18.0.0/24 mynetwork
//給容器test2固定mynetwork的網段IP地址
docker run -itd --name test2 --network mynetwork --ip 172.18.0.100 centos:7 /bin/bash
//進入查看地址
docker exec -it ID號 /bin/bash
ifconfig
三、docker的CPU、內存、IO資源控制
3.1、CPU使用率控制
cd /sys/fs/cgroup/cpu/docker/ 裏可以看到所有的容器信息。
1、限定CPU使用不超過30%
- CPU進程數爲100000,那麼CPU的30%爲30000
- cpu-quota:指定cpu的使用上限的百分比
#-i表示輸入,-t表示綁定終端
docker run -itd --name test1 --cpu-quota 30000 centos:7 /bin/bash
或者
echo 30000 > /sys/fs/cgroup/cpu/docker/ID號/cpu.cfs_quota_us
另開一個終端窗口用命令 docker stats查看
2、按比例分配CPU
- cpu-shares:
cpu資源提供一組容器使用,組內的容器按比例使用cpu資源,cpu資源被負載打的容器佔用(按照壓縮比例分配),當空閒進行運行起來時,cpu資源會被分配到其他容器 - 創建兩個容器爲c1和c2,若只有這兩個容器,設置容器的權重,使得c1和c2的CPU資源佔比爲。
docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7
驗證:分別進入容器docker exec -it ID號 /bin/bash安裝下面兩個軟件
yum install -y epel-release
yum install -y stress
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 0,1 centos:7 /bin/bash
驗證:進入此容器安裝epel-release、stress包
yum install -y epel-release
yum install -y stress
stress -c 4 #產生四個CPU線程
再開一個終端頁面輸入top命令查看動態進程。
3.2、內存使用限制
docker run -itd --name test3 -m 512m centos:7
docker run -itd --name c5 -m 1024m centos:7
驗證:
docker stats #另一個終端窗口查看所有容器的狀態值
3.2、磁盤I/O讀寫的優化
1、限制數據量
--device-read-bps:限制讀某個設備的bps(數據量)
格式:docker run -itd --name 名字 --device-read-bps 設備名:讀取額度 centos:7
例: docker run -d --name test4 --device-read-bps /dev/sda:30M centos:7
--device-write-bps:限制寫入某個設備的bps(數據量)
格式:docker run -itd --name 名字 --device-read-bps 設備名:寫入額度 centos:7
例: docker run -d --device-write-bps /dev/sda:30M centos:7
2、限制次數
--device-read-iops:限制讀某個設備的iops(次數)
--device-write-iops:限制寫入某個設備的iops(次數)
我們的資源控制就到這裏!