Docker_网络模式及资源限制
网络模式
下面的内容主要是从w3cschool上看到的,下面只是做一个记录,推荐到https://www.w3cschool.cn/ikjzm/ikjzm-gnue24x9.html看
docker四种网络模式
- none 不采用网络配置
- container 和已有的容器共享IP和端口
- bridge 默认的网络模式,容器所有请求通过docker0进程发送和接受
- host 和宿主机采用同一个NameSpace容器会使用和宿主机一致的IP和PORT,不会虚拟出自己的网卡,但文件系统 进程还是隔离的
bridge
容器默认是可以访问外部网络,但外部网络不能访问容器
网络访问流程:\
宿主机监听端口 通过IP tables的nat表转发给docker0网桥
iptables -t nat -vnL
每个容器都会启动一个虚拟网卡,这个虚拟网卡连接着容器内的eth0和docker0
下面这张图我理解的是docker0可能包含多个组,每个组有自己的网卡主网卡一样
资源限制
docker采用cgroup来限制内存,cpu 和 io 速率的隔离
CPU限制
CPU 资源的控制也有两种策略,一种是完全公平调度 (CFS:Completely Fair Scheduler)
策略,提供了限额和按比例分配两种方式进行资源控制;另一种是实时调度(Real-Time
Scheduler)策略,针对实时进程按周期分配固定的运行时间。配置时间都以微秒(μs)为
单位,文件名中用 us 表示。
CFS 调度策略下的配置
按权重比例设定 CPU 的分配
docker 提供了–cpu-shares 参数,在创建容器时指定容器所使用的 CPU 份额值。例如:
使用命令 docker run -tid –cpu-shares 100 镜像,创建容器,则最终生成的 cgroup 的 cpu 份额
配置可以下面的文件中找到:
cat /sys/fs/cgroup/cpu/docker-<容器的完整长 ID>/cpu.shares
cpu-shares 的值不能保证可以获得 1 个 vcpu 或者多少 GHz 的 CPU 资源,仅仅只是一个加权
值。
该加权值是一个整数(必须大于等于 2)表示相对权重,最后除以权重总和算出相对比例,
按比例分配 CPU 时间。
默认情况下,每个 docker 容器的 cpu 份额都是 1024。单独一个容器的份额是没有意义的,
只有在同时运行多个容器时,容器的 cpu 加权的效果才能体现出来。例如,两个容器 A、B
的 cpu 份额分别为 1000 和 500,在 cpu 进行时间片分配的时候,容器 A 比容器 B 多一倍的
机会获得 CPU 的时间片。如果容器 A 的进程一直是空闲的,那么容器 B 是可以获取比容器
A 更多的 CPU 时间片的。极端情况下,比如说主机上只运行了一个容器,即使它的 cpu 份额
只有 50,它也可以独占整个主机的 cpu 资源。
cgroups 只在容器分配的资源紧缺时,也就是说在需要对容器使用的资源进行限制时,才会
生效。因此,无法单纯根据某个容器的 cpu 份额来确定有多少 cpu 资源分配给它,资源分配
结果取决于同时运行的其他容器的 cpu 分配和容器中进程运行情况。
内存限制
和 CPU 控制一样,docker 也提供了若干参数来控制容器的内存使用配额,可以控制容器的
swap 大小、可用内存大小等各种内存方面的控制。主要有以下参数:
Docker 提供参数-m, –memory=””限制容器的内存使用量,如果不设置-m,则默认容器内存
是不设限的,容器可以使用主机上的所有空闲内存
内存配额控制使用示例
设置容器的内存上限,参考命令如下所示
docker run -dit –memory 128m 镜像
默认情况下,除了–memory 指定的内存大小以外,docker 还为容器分配了同样大小的 swap
分区,也就是说,上面的命令创建出的容器实际上最多可以使用 256MB 内存,而不是 128MB内存。如果需要自定义 swap 分区大小,则可以通过联合使用–memory–swap 参数来实现控制。
盘 磁盘 IO 配额控制
主要包括以下参数:
–device-read-bps:限制此设备上的读速度(bytes per second),单位可以是 kb、mb 或者 gb。
–device-read-iops:通过每秒读 IO 次数来限制指定设备的读速度。
–device-write-bps :限制此设备上的写速度(bytes per second),单位可以是 kb、mb 或者 gb。
–device-write-iops:通过每秒写 IO 次数来限制指定设备的写速度。
–blkio-weight:容器默认磁盘 IO 的加权值,有效值范围为 10-1000。
–blkio-weight-device: 针对特定设备的 IO 加权控制。其格式为 DEVICE_NAME:WEIGHT