docker的資源控制(網絡、CPU、內存、IO)

一、前言

  • 一臺主機可以放多個容器,默認的情況下,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(次數)

我們的資源控制就到這裏!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章