当前位置: 首页> 财经> 股票 > 宝安区在深圳排第几_济宁网_永久免费客服系统软件_上海seo服务外包公司

宝安区在深圳排第几_济宁网_永久免费客服系统软件_上海seo服务外包公司

时间:2025/7/9 4:20:41来源:https://blog.csdn.net/lcadna/article/details/145508780 浏览次数:0次
宝安区在深圳排第几_济宁网_永久免费客服系统软件_上海seo服务外包公司

Docker 利用 cgroup 来限制容器的 CPU、内存、I/O、网络等资源。你可以手动用 cgroup 创建一个 类似 Docker 的受限进程,来理解 Docker 的底层封装。


最简单的 cgroup + namespace 实现容器

Docker 不仅仅是 cgroup,还用到了 namespace(名字空间),所以我们用 unshare + cgroup 手写一个最小的 "容器"。


Demo 1:用 cgroup 限制进程

步骤 1:创建 cgroup

 

bash

复制编辑

mkdir /sys/fs/cgroup/demo_container

步骤 2:限制资源

(1) 限制 CPU 只能用 50%
 

bash

复制编辑

echo "50000 100000" > /sys/fs/cgroup/demo_container/cpu.max

(2) 限制内存最多 100MB
 

bash

复制编辑

echo "100000000" > /sys/fs/cgroup/demo_container/memory.max

(3) 限制进程数最多 5 个
 

bash

复制编辑

echo "5" > /sys/fs/cgroup/demo_container/pids.max


步骤 3:启动进程,并加入 cgroup

 

bash

复制编辑

sleep 99999 & echo $! > /sys/fs/cgroup/demo_container/cgroup.procs

这个进程 只能用 50% CPU、100MB 内存,最多开 5 个子进程,跟 Docker 容器的资源限制类似!


Demo 2:用 namespace 实现隔离

Docker 还用 namespace 实现进程隔离,我们可以手写一个最小容器。

步骤 1:启动隔离的进程

 

bash

复制编辑

unshare -m -u -i -n -p -f --mount-proc bash

解释:

  • -m → 隔离 挂载点(类似 chroot
  • -u → 隔离 主机名
  • -i → 隔离 进程 ID
  • -n → 隔离 网络
  • -p → 隔离 PID
  • -f → 让 bash 变成新 namespace 的第一个进程
  • --mount-proc → 挂载新的 /proc

步骤 2:修改 hostname

 

bash

复制编辑

hostname my-container

现在 hostname 在这个进程里变了,外面不受影响!

步骤 3:查看进程

 

bash

复制编辑

ps aux

你会发现进程 ID 跟主机不一样,说明它在自己的 PID namespace 里,和 Docker 容器行为一致!


Docker 是怎么用 cgroup 和 namespace 的?

当你运行:

 

bash

复制编辑

docker run -it --memory=100m --cpus=0.5 ubuntu bash

Docker 其实做了三件事:

  1. 创建 cgroup
    • memory.max=100m
    • cpu.max=50%
    • pids.max=无限制
  2. 创建 namespace
    • mount namespace(隔离文件系统)
    • network namespace(隔离网络)
    • pid namespace(隔离进程)
  3. 运行进程
    • /bin/bash 作为容器的第一个进程

你可以用 docker inspect <容器 ID> 看到 cgroup 具体路径,比如:

 

bash

复制编辑

cat /sys/fs/cgroup/memory/docker/<容器ID>/memory.max

会发现它和 docker run --memory=100m 对应上了。


总结

  • cgroup:Docker 用它 限制 CPU、内存、I/O
  • namespace:Docker 用它 隔离进程、网络、文件系统
  • unionfs:Docker 用它 提供分层镜像

unshare + cgroup 手写一个最小的容器,感受 Docker 的底层封装

关键字:宝安区在深圳排第几_济宁网_永久免费客服系统软件_上海seo服务外包公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: