Docker网络和资源控制命令(20版)

1、容器网络概述

■ docker0网络
■ docker虚拟网关
■ loopback
● 回环网卡、TCP/IP网卡是否生效
■ virtual bridge
● linux自身继承了一个虚拟化功能(kvm架构),是原生架构的一个虚拟化平台,安装了一个虚拟化平台之后就会系统就会自动安装虚拟网卡
◆ 安装workstation(虚拟化平台)之后,会在网络适配器中会多出VMnet1 VMnet8 VMnet0

■ 小结:
docker 0:容器的网关,绑定物理网卡,负责做NAT地址转换、端口映射
docker 0本身也是一种容器

2、docker四种网络模式

■ host模式

  • -net=host
  • 容器和宿主机共享Network namespace
  • host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口,如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的NetworkNamespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的
  • 使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是dockerhost 上已经使用的端口就不能再用了,网络的隔离性不好

■ container模式

  • -net=container:NAME_or_ID
  • 容器和另外一个容器共享Network namespace
  • container创建的容器不会创建自己的网卡、设置IP等,而是和一个指定地容器共享IP、端口范围
    这个模式指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和宿主机共享,新创建的容器不会创建自己的网卡,配置自己的Ip,而是和一个指定地容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表还是隔离的。两个容器的进程可以通过loo 网卡设备通信

■ none模式(该模式关闭了容器的网络功能)

  • -net=none
  • 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等
  • 这种网络模式下容器只有lo回环网口,没有其他的网卡。none模式可以在容器创建时通过-network=none参数指定
  • 这种类型的网络无法联网,但是封闭的网络能很好的保证容器的安全性

■ bridge模式

  • -net=bridge (默认为该模式)
  • 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虚拟网桥,通过dockero 网桥及iptables的nat表配置与宿主机通信(与ens33对接)
  • 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中
  • 从dockerO子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair 设备,Docker将 veth pair 设备的一端放在(以挂载的方式)新创建的容器中,并命名为etho(容器的网卡),另一端放在主机中,以vethxxx(veth对:一对虚拟接口,用于连接两个虚拟网络环境,以挂载的形式挂载到两个名称空间)这样类似的名字命名,并将这个网络设备加入到dockero 网桥中。可以通过brctl show命令查看
  • bridge模式是docker的默认网络模式,不写-net参数,就是 bridge模式。使用docker run -p时, docker实际是在iptables,做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
    注:以上不需要动手配置,真正需要配置的是自定义网络

3、docker自定义网络

3.1、自定义网络固定IP

[root@docker ~]# docker network ls
[root@docker ~]# docker network create --subnet=172.18.0.0/16 net
[root@docker ~]# docker network ls

在这里插入图片描述

[root@docker ~]# docker run -itd --name test2 --net net --ip 172.18.0.100 centos:7 /bin/bash
590a5cd37960b7898821a9d179f37e5fb6508f33809c172f95cb720ae3540037
[root@docker ~]# docker ps -a
[root@docker ~]# docker exec -it 590a5cd37960 /bin/bash
[root@590a5cd37960 /]# yum -y install net-tools
[root@590a5cd37960 /]# ifconfig

在这里插入图片描述

4、docker资源控制(cpu、内存、IO资源控制)

4.1、cpu使用率控制

[root@docker ~]# cd /sys/fs/cgroup/cpu/docker
[root@docker docker]# ll
[root@docker docker]# cd 590a5cd37960b7898821a9d179f37e5fb6508f33809c172f95cb720ae3540037
[root@docker 590a5cd37960b7898821a9d179f37e5fb6508f33809c172f95cb720ae3540037]# ls
[root@docker 590a5cd37960b7898821a9d179f37e5fb6508f33809c172f95cb720ae3540037]# cat cpu.cfs_quota_us 

在这里插入图片描述

■ 注:"-1"代表了此容器可以使用的资源不受限制
cpu周期:1s为一个周期的定律,参数值一般为100000(cpu衡量单位是秒)
假如需要给此容器分配àpu使用率的20%,则参数需要设置为20000,相当于每个周期分配给这个容器0.2s
cpu在一个时刻,只能给一个进程占用

■ 检查资源的命令:
top
docker stats(查看容器使用的资源情况)

例:20%的限定

■ 方式一:

docker run -itd --name test2 --cpu-quota 20000 centos:7 /bin/bash
//CPU压力测试
docker exec -it id /bin/bash
yum install -y bc
#计算圆周率
echo "scale=5000;4*a(1)" | bc -l -q
[root@docker ~]# docker run -itd --name test3 --cpu-quota 20000 centos:7 /bin/bash
d4a846253b99e993811473ac11c7d9c2f39db45cea984ee38f65af04dbdbccc6
[root@docker ~]# docker exec -it d4a846253b99 /bin/bash
[root@d4a846253b99 /]# yum -y install bc
[root@d4a846253b99 /]# echo "scale=5000;4*a(1)"| bc -l -q

在这里插入图片描述

■ 方式二

对已有容器进行更改
[root@docker docker]# cd 590a5cd37960b7898821a9d179f37e5fb6508f33809c172f95cb720ae3540037
[root@docker 590a5cd37960b7898821a9d179f37e5fb6508f33809c172f95cb720ae3540037]# echo "20000" > cpu.cfs_quota_us
[root@docker 590a5cd37960b7898821a9d179f37e5fb6508f33809c172f95cb720ae3540037]# cat cpu.cfs_quota_us 

在这里插入图片描述

4.2、设置容器的权重

按比例分配设置容器权重,此处权重是所有值相加然后看占用百分比
[root@docker ~]# docker run -itd --name a1 --cpu-shares 512 centos:7 /bin/bash
2a6755008122ffcfa1caf95bbd50f516eb831451a77e86f7b02ce3646f27bbcf
[root@docker ~]# docker run -itd --name a2 --cpu-shares 1024 centos:7 /bin/bash
72aaf301a8861827d1ff3060990fcfac1585f65c1f36b116a1ad8a124ac764f6
[root@docker ~]# docker ps -a

在这里插入图片描述

[root@docker ~]# docker exec -it 2a6755008122 /bin/bash

4.2.1、使用压测工具

复制两个终端、分别进入容器后进行测试,主终端使用docker stats进行查看
[root@72aaf301a886 /]# yum -y install epel-release
[root@2a6755008122 /]# yum -y install epel-release

4.2.2、stress 模拟满载线程

[root@2a6755008122 /]# yum  -y install stress
[root@72aaf301a886 /]# yum -y install stress
[root@72aaf301a886 /]# stress -c 4
stress: info: [92] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
[root@2a6755008122 /]# stress -c 4
stress: info: [89] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
[root@docker ~]# docker stats  #查看主终端上docker stats动态检测的状态

在这里插入图片描述

4.3、限制容器使用的cpu(指定使用第二个和第四个)

[root@docker ~]# docker run -itd --name c2 --cpuset-cpus 1,3 centos:7 /bin/bash
afc1017003042489f61f4276c25cb48720c8c248bee592e094ac817aba7d5450
[root@docker ~]# docker exec -it afc101700304 /bin/bash
[root@afc101700304 /]# yum -y install epel-release
[root@afc101700304 /]# yum -y install stress
[root@afc101700304 /]# stress -c 2
stress: info: [111] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

在这里插入图片描述

4.4、内存使用限制

[root@docker ~]# docker run -itd --name c1 -m 512m centos:7 /bin/bash
10541be0a5fb5fb24bc21fe3b6414e5e6141bc067a74899a18397cc156d3d42a
[root@docker ~]# docker stats  #查看cpu状态

在这里插入图片描述

4.5、查看容器状态或者资源使用情况的命令

1、top
2、docker stats
3、docker inspect 容器ID

猜你喜欢

转载自blog.csdn.net/weixin_50344814/article/details/114631995