当前位置: 首页 > news >正文

CGroup 资源控制组 + Docker 网络模式

1 CGroup 资源控制组

1.1 为什么需要 CGroup
- 容器本质 = 宿主机上一组进程  
- 若无资源边界,一个暴走容器即可拖垮整机 
- CGroup 提供**内核级硬限制**,比 `ulimit`、`nice` 更可靠

1.2 核心概念 3 件套
| 概念 | 一句话解释 | 查看方式 |
| Hierarchy | 树形挂载点,所有子系统挂在同一点 | `mount \| grep cgroup` |
| Subsystem | 6 大资源控制器(cpu、memory …) | `cat /proc/cgroups` |
| CGroup | 节点目录,关联一组进程 | `ls /sys/fs/cgroup/*/docker/<容器ID>` |

1.3 6 大常用子系统 & Docker CLI 映射
| Subsystem | 作用 | 文件示例 | Docker CLI |
| `cpu` | CPU 时间权重 | cpu.shares | `--cpu-shares` |
| `cpuacct` | CPU 用量统计 | cpuacct.usage | `docker stats` |
| `cpuset` | 绑定核心 | cpuset.cpus | `--cpuset-cpus` |
| `memory` | 内存 + Swap | memory.limit_in_bytes | `-m 200m` |
| `blkio` | 磁盘 I/O 限速 | blkio.throttle.* | `--device-read-bps` |
| `pids` | 最大进程数 | pids.max | `--pids-limit 100` |

1.4 实操必做
bash
# 1. 查看当前挂载
mount | grep cgroup

# 2. 查看容器 123abc 的内存上限
cat /sys/fs/cgroup/memory/docker/123abc*/memory.limit_in_bytes

# 3. 动态修改(root)
echo 104857600 > /sys/fs/cgroup/memory/docker/123abc*/memory.limit_in_bytes

# 4. 热更新(推荐)
docker update -m 200m 123abc

1.5 高频错误 & 面试考点
- 报错: `no space left on device` → 宿主机 `pids.max` 打满  
- Swap 规则: `memory-swap` ≥ memory,设为 `-1` 表示不限 Swap  
- K8s 对应: `limits.memory` 最终仍由 CGroup memory 子系统执行

2  Docker 网络模式

2.1 五种原生网络模式速记表
| 模式 | 是否隔离 NetNS | 自动 IP | 端口映射(-p) | 场景 |
| bridge | ✅ | ✅ | ✅ | 单机默认 |
| host | ❌ | ❌ | ❌ | 追求极致性能 |
| none | ✅ | ❌ | ❌ | 自定义网络栈 |
| container | ❌(共享) | ❌ | ❌ | sidecar |
| 自定义 | ✅ | ✅ | ✅ | 微服务隔离 |

2.2 bridge 模式流量路径(文字图)
容器 → veth → docker0 → iptables NAT → 宿主机物理网卡

2.3 端口映射原理(iptables 两行规则)
bash
docker run -d -p 8080:80 nginx

- DNAT 进入容器  
-A DOCKER ! -i docker0 -p tcp --dport 8080 -j DNAT --to 172.17.0.2:80
- SNAT 回包  
-A POSTROUTING -s 172.17.0.2 -p tcp --sport 80 -j MASQUERADE

 2.4 自定义网络 3 大优势
1. 内置 DNS:容器名即可互 ping(替代 `--link`)  
2. 隔离:多网段、多环境  
3. 可配置:自定义 `--subnet`、`--ip-range`

2.5 实操:创建并使用自定义网络
bash
# 1. 新建网络
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
my-net

# 2. 启动两容器
docker run -d --name web --network my-net nginx:alpine
docker run -it --rm --name cli --network my-net busybox
/ # ping web

2.6 overlay 跨主机网络
bash
# manager
docker swarm init --advertise-addr 192.168.1.10
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
ov-net

# 部署服务
docker service create --name web --network ov-net -p 80:80 nginx

- 抓包验证 VXLAN
tcpdump -i eth0 -n udp port 4789 -w vxlan.pcap

http://www.dtcms.com/a/361941.html

相关文章:

  • NLP大语言模型数据准备
  • NLP技术突破:浅层与深层语义分析全解析
  • 嵌入式学习(day37) 数据库 Sqlite相关命令函数
  • Salesloft OAuth漏洞影响范围大幅增加,波及所有集成应用
  • 可编辑115页PPT | 某纸制品制造企业数字化转型战略规划项目建议书
  • 闭包的简单讲解
  • 三、数据结构
  • VMware安装
  • 基于docker-compose搭建EFK(Elasticsearch+fluentd+kibana)的日志平台
  • 【高等数学】第十章 重积分——第五节 含参变量的积分
  • python3中的除法/ (会把int变成float)向下取整//(不会改变int类型) 和 直接舍弃小数,向0截断
  • JVM性能监控工具的使用
  • python中的分代垃圾回收机制的原理【python进阶二、2】
  • 基于uni-app的校园综合服务平台开发实战
  • uni-app支持单多选、搜索、查询、限制能否点击组件
  • 掌握CRISPE框架:结构化提示词设计的终极指南
  • 【溜冰场轮滑计时计费扣次软件有哪些?】分享常见的几款软件,佳易王软件系列#软件功能解析操作教程
  • Tiny RDM:一个现代化轻量级的Redis桌面客户端
  • 盟接之桥说制造:浅谈本分和做正确的事情
  • 前端微前端架构深度实践:从单体应用到微前端的完整架构解决方案
  • 携程旅行 web 验证码 分析
  • GET、POST、添加、编辑
  • python爬虫之selenium库进阶(小白五分钟从入门到精通)
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(23):文法+单词第7回5+考え方3
  • 为什么要使用RocketMQ半消息
  • 使用C#语言 基于FTP协议进行文件夹上传下载
  • 【Android】Span富文本简介
  • 苹果 Safari 地址栏可能被超大光标视觉欺骗
  • 阿里云OSS架构示意图与流程
  • AR眼镜在警务安防的应用方案