Docker_网络模式及资源限制

网络模式

下面的内容主要是从w3cschool上看到的,下面只是做一个记录,推荐到https://www.w3cschool.cn/ikjzm/ikjzm-gnue24x9.html看

docker四种网络模式
  1. none 不采用网络配置
  2. container 和已有的容器共享IP和端口
  3. bridge   默认的网络模式,容器所有请求通过docker0进程发送和接受
  4. 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


Docker_网络模式及资源限制
https://imwang77.github.io/2020/12/09/Docker_网络模式及资源限制/
作者
imwang77
发布于
2020年12月9日
更新于
2024年1月3日
许可协议