Docker容器隔离(namespace+cgroups)-底层原理

文章目录

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

Docker容器隔离

1.namespace-进程通信限制

命名空间简介:

命名空间是 Linux 内核提供的一种机制,用于将系统资源(如进程、网络、文件系统等)隔离开来,使得在一个命名空间中的资源对其他命名空间不可见或不可访问。

namespace :是 linux 中用来隔离进程的手段,容器就是使用该技术来进行隔离的。

可以把进程当做是对讲机,而 namespace 就是频段。两个对讲机(进程)要互相通信就需要调整到相同的频段上(namespace)。

namespace:进程间通信隔离

bash 复制代码
# 1.启动一个容器
# 2. 进入虚拟文件系统,查看进程信息
# proc文件夹下会有多个名称是数字的文件夹-每个数字文件夹就是一个进程
cd /proc/5131
# 3. 进入进程信息文件夹,包含容器中各种命名空间
cd ns

进程文件夹命名空间信息:

根据命名空间隔离的内容如下:

ipc: 进程间通信命名空间

mnt:文件挂载命名空间

net: 网络命名空间

pid: 进程id名称空间

user: 用户名称空间

故障注入可以使用到命名空间

2. cgroups-资源限制

cgroups :是 linux 用来限制进程使用资源的手段。容器也是利用这个技术进行资源的隔离。

bash 复制代码
#查看当前系统的 cgroups
mount -t cgroups 

cgroups: 资源隔离

资源隔离参数示例

资源类型 Docker 参数示例 作用
CPU --cpus=1.5--cpu-quota 最多使用 1.5 个 CPU 核心
内存 -m 2g--memory=2048m 最多使用 2GB 内存,超了会被 kill
磁盘 IO --blkio-weight 限制磁盘读写速度
进程数 --pids-limit=100 最多只能起 100 个进程

资源隔离使用方式

使用方式:在docker run启动容器时指定参数即可;如-m, -cpus

资源隔离一般限制内存和cpu

bash 复制代码
# 在容器运行时,直接使用参数指定资源限制
# 限制内存512兆,cpu两核
docker run --name=nginx -d -m 512m --cpus=2 nginx

【注】k8s通过cgroups计算剩余资源,编写简单脚本,计算剩余资源,但也是使用的cgroups

cgroups四大功能

  1. 资源限制:可以对任务使用的资源总额进行限制。
  2. 优先级分配:通过分配cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行 优先级。
  3. 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等。
  4. 任务控制:cgroups可以对任务执行挂起,恢复等操作。

测试时注意

概念 作用 测试场景
Namespace 隔离环境 多版本并行测试、避免端口/进程冲突
Cgroups 限制资源 模拟弱机环境、防止资源耗尽、稳定性测试
场景 你能做什么
故障注入 人为限制内存/CPU,观察系统降级或告警是否正常
性能测试 确保测试容器不会吃光宿主机资源影响其他任务
日志/监控 通过 /sys/fs/cgroup/ 查看容器实际资源消耗(高级)

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
IT狂人日志2 小时前
临近年底,病毒肆虐,为防暴力破解,把服务器改为证书登录
运维·服务器
修己xj2 小时前
Docker 部署 PicGo:一次配置,随处使用
运维·docker·容器
Ha_To2 小时前
2026.1.29 docker的使用
运维·docker·容器
刘某某.2 小时前
在 mac 和 linux 系统上使用 pyenv
linux·运维·macos
Hellc0072 小时前
Jenkins 上下游 Job + Docker 镜像部署完整实战(避坑版)
java·docker·jenkins
A-刘晨阳2 小时前
Prometheus + Grafana + Alertmanager 实现邮件监控告警及配置告警信息
运维·云计算·grafana·prometheus·监控·邮件
是垚不是土2 小时前
OpenTelemetry+Jaeger+ES:分布式链路追踪实战部署
大数据·linux·运维·分布式·elasticsearch·全文检索
惊鸿Randy2 小时前
Docker 环境下 PostgreSQL 16 安装 pgvector 向量数据库插件详细教程(Bitnami 镜像)
数据库·docker·postgresql
曹天骄2 小时前
Cloudflare CDN 预热全面实战指南(含全球 PoP 解析 + 预热覆盖模型)
运维·开发语言·缓存