Docker网络、资源控制

网友投稿 217 2022-10-29

Docker网络、资源控制

Docker网络在创建安装完docker后,使用,查看网卡信息,会出现一个docker的默认虚拟容器网关docker 0,通过桥接的方式,与宿主机的网卡进行通信。在创建容器后,虚拟容器网关docker 0会分配一个IP地址给容器,该网关下的容器,通过分配的IP地址进行通信,与外界网络通信时,通过映射容器的端口到宿主机,外界访问容器时,通过宿主机的IP地址+端口号进行访问,不同的docker网络之间属于不同的namespace,与宿主机网卡桥接

[root@docker ~]# ifconfig docker0: flags=4099 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 ether 02:42:c9:35:4c:f8 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

查看docker的网络信息

[root@docker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 5480e1cefc97 bridge bridge local 977198fa3d32 host host local ff3274efbced none null local

#使用bridge网络时,是无法指定对应的IP的 #下面的创建容器的操作语句是无法成功执行的 [root@docker ~]# docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash #正确的方法 [root@docker ~]# docker run -itd --name test1 --network bridge centos:7 /bin/bash [root@docker ~]# docker exec -it 7cf1e1134a9e /bin/bash [root@7cf1e1134a9e /]# ifconfig //进入容器查看自动分配IP地址 eth0: flags=4163 mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 2695 bytes 15070315 (14.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2544 bytes 140980 (137.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

2、自定义网络

#创建网络 [root@docker ~]# docker network create --subnet=172.18.0.0/24 mynetwork [root@docker ~]# ifconfig //宿主机可直接查看到创建的虚拟网卡的信息 br-9f77b8941dc3: flags=4099 mtu 1500 inet 172.18.0.1 netmask 255.255.255.0 broadcast 0.0.0.0 ether 02:42:20:72:5c:d7 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 #创建容器网络为自定义网络 [root@docker ~]# docker run -itd --name test2 --network mynetwork --ip 172.18.0.10 centos:7 /bin/bash [root@docker ~]# docker exec -it ed2fd28fe04c /bin/bash [root@ed2fd28fe04c /]# ifconfig eth0: flags=4163 mtu 1500 inet 172.18.0.10 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe12:a prefixlen 64 scopeid 0x20 ether 02:42:ac:12:00:0a txqueuelen 0 (Ethernet) RX packets 3359 bytes 15102531 (14.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3151 bytes 173627 (169.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

CPU、内存、IO资源控制1、CPU使用率控制

#查看指定网卡的使用率 [root@docker ~]# cat /sys/fs/cgroup/cpu/docker/容器ID/cpu.cfs_quota_us #设置20%的限定 [root@docker ~]# docker run -itd --name test1 --cpu-quota 20000 centos:7 /bin/bash 或者设置已存在的容器CPU [root@docker ~]# echo 20000 > /sys/fs/cgroup/cpu/容器ID/cpu.cfs_quota_us

2、容器CPU压力测试(在容器内)

[root@3b12b7cb2f2c /]# yum install bc -y [root@3b12b7cb2f2c /]# echo "scale=5000; 4*a(1)" | bc -l -q #打开新的终端,在宿主机使用top命令查看CPU使用情况

名词解释a是bc的一个内置函数,代表反正切arctan,由于tan(pi/4)=1,于是4*arctan(1)=pi-l:使用标准数学库-q:不输出在界面

3、按比例分配CPU.

#创建两个容器为c1和c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为33.3%和66.7% [root@docker ~]# docker run -itd --name c1 --cpu-shares 512 centos:7 [root@docker ~]# docker run -itd --name c2 --cpu-shares 1024 centos:7 #分别进容器 [root@9ac3a10deb01 /]# yum install epel-release -y [root@9ac3a10deb01 /]# yum install stress -y [root@9ac3a10deb01 /]# stress -c 4 //产生四个CPU线程 #验证结果 [root@docker ~]# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 311d1565d5bd c2 65.81% 988KiB / 1.938GiB 0.05% 23.2MB / 261kB 0B / 0B 7 9ac3a10deb01 c1 33.03% 984KiB / 1.938GiB 0.05% 23.3MB / 340kB 0B / 0B 7

4、限制容器使用指定的CPU

[root@docker ~]# docker run -itd --name test2 --cpuset-cpus 1,3 centos:7 /bin/bash //验证方法:压测容器,使用top命令,按1检查 [root@docker ~]# top top - 18:05:05 up 11 min, 2 users, load average: 1.20, 0.30, 0.12 Tasks: 174 total, 5 running, 169 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

5、内存使用限制

[root@docker ~]# docker run -itd --name test3 -m 512m centos:7 #验证 [root@65b7a836429f /]# stress -m 1024m --vm 2 [root@docker ~]# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 65b7a836429f test3 201.46% 198.1MiB / 512MiB 38.69% 23.3MB / 327kB 0B / 0B 5

6、对blkio的限制--device-read-bps:限制读某个设备的bps(数据量)例:docker run -d --device-read-bps /dev/sda:30 centos:7--device-write-bps:限制写入某个设备的bps(数据量)例:docker run -d --device-write-bps /dev/sda:30 centos:7--device-read-iops:限制读某个设备的iops(次数)--device-write-iops:限制写入某个设备的iops(次数)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现英文猜词游戏的示例代码
下一篇:可编程 USB 转串口适配器开发板的详细接口与功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~