Docker资源控制

一、网络资源控制

firewalld防火墙中自带nat地址转换功能,所以不要关闭,只需要把setenforce 0核心防护关闭就行了

1、查看docker网络信息

[root@localhost ~]# docker network ls

在这里插入图片描述

网络模式详解

安装Docker时,它会自动创建三个网络,bridge (创建容器默认连接到此网络)、none 、host

host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。(与宿主机共享)

None:该模式关闭了容器的网络功能。

Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。(默认为该模式)

Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。(容器和另外一个容器共享)

以上都是不用动手的,真正需要配置的是自定义网络。

docker装完以后会多一个docker0网卡

docker0:虚拟容器网关(所有容器的网关:172.17.0.1)
在这里插入图片描述

2、配置docker网络

① bridge自动给分配

桥接bridge模式会自动分配给容器一个IP地址,无法手动指定IP

例如:

[root@localhost ~]# docker run -itd --name test1 --network bridge --ip 172.17.0.100 centos:7 /bin/bash

在这里插入图片描述在这里插入图片描述在这里插入图片描述

现在我们正常选择bridge模式,不手动指定ip尝试创建

[root@localhost ~]# docker run -itd --name test1 --network bridge centos:7 /bin/bash

可以看到是可以创建成功的,并且是开启状态
在这里插入图片描述

登录容器查看IP

容器里面是什么都没有的,所以需要下载工具才可以使用ifconfig查看IP

[root@localhost ~]# docker exec -it 19781c1232b6 /bin/bash
[root@19781c1232b6 /]# yum install -y net-tools

在这里插入图片描述在这里插入图片描述

② 自定义网络(手动指定固定IP)

创建一个子网段的命名空间,自定义一个网络命名空间

在这里插入图片描述

创建容器选择自己定义的网络命名空间mynetwork,指定固定IP

[root@localhost ~]#docker run -itd --name test2 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash

在这里插入图片描述

登录容器查看IP

[root@localhost ~]# docker exec -it 9c33f88df086 /bin/bash
[root@19781c1232b6 /]# yum install -y net-tools

在这里插入图片描述

二、CPU资源控制

1、CPU使用率上限控制

#进入目录

[root@localhost ~]# cd /sys/fs/cgroup/cpu/docker

在这里插入图片描述在这里插入图片描述

查看cpu.cfs_quota_us 文件,可以看到一个参数值
在这里插入图片描述

参数值 -1 :表示cpu使用资源不受限制
这种情况是不合理的,影响非常严重,所以需要做限制

不合理原因:

①一个节点服务器有多个容器,一个容器占用率高,其他容器资源不够使用
②比如这一个容器受到攻击,可以直接使服务器瘫痪

cpu周期为1s 参数值为100000 假如要使用cpu配比为20%,设置参数值为20000即可。1s为100000,0.2s 20000

参数限定有两种方式:

① 创建容器时直接设定好(–cpu-quota)

在Docker中可以通过–cpu-quota选项来限制CPU的使用率

② 更改配置文件

修改对应的Cgroup配置文件/sys/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us 参数值来实现,直接使用echo将值导入此文件中即可生效

示例:创建容器时设定

#创建容器

[root@localhost ~]# docker run -itd --name test3 --cpu-quota 20000 centos:7 /bin/bash

在这里插入图片描述

#进入容器进行压力测试

[root@54bbe1f49f76 /]# yum install bc -y		#安装压测工具
[root@54bbe1 f49f76/]# echo "scale=5000;4* a(1)" | bc -l -q		#计算圆周率的压测公式

解释:
计算圆周率的压测公式
scale=5000,小数点后面的5000位。a是bc的一个内置函数,代表反正切arctan ,由于tan(pi/4) = 1,于是4*arctan(1) = pi -l使用标准数学库 -q不输出在界面

在这里插入图片描述在这里插入图片描述

2、多任务按比例分享CPU

当有多个容器任务运行时,很难计算CPU的使用率。为了使容器合理使用CPU资源,可以通过–cpu-share选项来设置CPU按比例共享资源,这种方式还可以实现CPU使用率的动态调整,灵活性大大增加

如:运行两个容器,设置容器的权重,使得c1和c2的CPU资源占比为33.3%和66.7%,(1 : 2)

权重解释:

docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7

比如两个容器,比例整合在一起,c1占512为1/3,c2占1024为2/3,这种就叫做权重,灵活性大大增加

如果再增加一个容器

docker run -itd --name c3 --cpu-shares 1024 centos:7

c1占512为1/5,c2占1024为2/5,c3占1024为2/5 (1 : 2 : 2)

① 创建容器

[root@localhost ~]# docker run -itd --name c1 --cpu-shares 512 centos:7
[root@localhost ~]# docker run -itd --name c2 --cpu-shares 1024 centos:7

在这里插入图片描述

② 压力测试

#进入容器并安装压测工具(两个容器均操作)

[root@8f2682289344 /]#  yum install -y epel-release  
[root@8f2682289344 /]#  yum install stress -y

#压测,产生四个CPU线程使其满载(两个容器同时操作)

[ root@5ed79616b34c /]# stress -c 4

#验证结果

重新打开终端,使用docker stats查看每个容器的资源使用情况

在这里插入图片描述

3、限制容器使用指定的CPU内核

在Docker中可以使用–cpuset-cpus选项来使某些程序独享CPU内核,以便提高其处理速度,选项后直接跟参数0,1,2,3……表示第1个内核,第二个内核,第三个内核,第四个内核……,与/rpoc/cpuinfo中的CPU编号(processor)相同。

对应的Cgroup配置文件/sys/fs/cgroup/cpuset/docker/容器编号/cpuset.cpus。

使用top命令按1查看

在这里插入图片描述

① 创建容器并指定使用CPU内核

只使用第二个(CPU1)和第四个(CPU3)核心数资源

[root@localhost ~]# docker run -itd --name test4 --cpuset-cpus 1,3 centos:7 /bin/bash

在这里插入图片描述

② 压力测试

#进入容器并安装压测工具

[root@e504d80ff6e1 /]#  yum install -y epel-release  
[root@e504d80ff6e1 /]#  yum install stress -y

#压测,产生四个CPU线程使其满载(两个容器同时操作)

[root@e504d80ff6e1 /]# stress -c 4

#验证结果

重新打开终端,使用top命令按1查看
在这里插入图片描述

以上CPU资源管控可以同时使用

三、内存资源控制

内存使用就是设置交换分区的上限值。可以使用docker run -m命令来限制容器内存使用量。

相应的Cgroup配置文件为/sys/fs/cgroup/memory/memory.limit_in_bytes

注意:一旦容器Cgroup使用的内存操过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制内存使用在限制范围之内,进程将会被杀死

1、创建容器并限制内存使用

#限制容器内存为512M

[root@localhost ~]# docker run -itd --name test5 -m 512m centos:7

在这里插入图片描述

2、验证

#进入容器并安装压测工具

[root@fa2c219eb994 /]#  yum install -y epel-release
[root@fa2c219eb994 /]#  yum install stress -y

##压测

[root@fa2c219eb994 /J]# stress -m 1204m --vm 2

#验证结果

重新打开终端,使用docker stats命令查看

[root@localhost~] # docker stats

在这里插入图片描述

不使用压测,也可直接使用docker stats命令查看LIMIT上限值设定为512M

在这里插入图片描述

四、IO资源控制

如果是在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时可以通过–device-write-iops选项来限制写入的iops,相应的还有–device-read-bps选项可以限制读取的iops。但是这种方法只能针对blkio限制的设备(device),而不是分区

  • bps是byte per second的简写,意思是每秒读写的数据量
  • iops是io per second的简写,意思是每秒IO的次数

blkio限制示例

① 限制读某个设备的bps (数据量):–device-read-bps:

例: docker run -itd --name blkio1 --device-read-bps /dev/sda:30M centos:7 /bin/bash

② 限制写入某个设备的bps (数据量):–device-write-bps

例: docker run -itd --name blkio2 --device-write-bps /dev/sda:30M centos:7 /bin/bash

③ 限制读某个设备的iops (次数):–device-read-iops

④ 限制写入某个设备的iops (次数):–device-write-iops

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值