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

Docker 容器如何实现隔离

Docker 容器通过 Linux 内核的多种技术实现隔离,主要包括 ​​Namespace(命名空间)​​、​​Cgroups(控制组)​​ 和 ​​联合文件系统​​。以下是详细原理:


​1. Linux Namespace(命名空间) - 核心隔离机制​

Namespace 是 Linux 内核提供的资源隔离技术,Docker 使用 6 种命名空间实现不同维度的隔离:

​(1) PID Namespace(进程隔离)​

# 宿主机查看所有进程
ps aux# 容器内只能看到容器自己的进程
docker run -it alpine ps aux

​原理​​:

  • 每个容器有独立的进程 ID 编号体系

  • 容器内的 PID 1 进程在宿主机上可能是 PID 1000

  • 容器无法看到或影响宿主机和其他容器的进程

​(2) Network Namespace(网络隔离)​

# 宿主机网络接口
ip addr show# 容器内网络接口(完全独立)
docker run -it alpine ip addr show

​原理​​:

  • 每个容器有独立的网络栈(网卡、IP、路由表、端口)

  • 容器间网络通过虚拟网桥(docker0)通信

  • 支持端口映射:容器端口 ↔ 宿主机端口

​(3) Mount Namespace(文件系统隔离)​

# 容器有独立的文件系统视图
docker run -it alpine ls /
# 输出:bin dev etc home lib ...(容器内文件系统)# 宿主机文件系统不受影响
ls /  # 宿主机自己的文件系统

​原理​​:

  • 每个容器有独立的文件系统挂载点

  • 基于联合文件系统(OverlayFS)实现分层存储

​(4) UTS Namespace(主机名隔离)​

# 容器可以有自己的主机名
docker run -it --hostname mycontainer alpine hostname
# 输出:mycontainer(不影响宿主机主机名)

​原理​​:

  • 每个容器可以设置独立的主机名和域名

​(5) IPC Namespace(进程间通信隔离)​

# 容器间共享内存、信号量、消息队列隔离
docker run -it alpine ipcs  # 只能看到容器内的 IPC 资源

​原理​​:

  • 隔离 System V IPC 和 POSIX 消息队列

​(6) User Namespace(用户隔离)​

# 容器内用户映射到宿主机非特权用户
docker run -it alpine whoami  # 显示 root
# 实际在宿主机上以普通用户运行

​原理​​:

  • 容器内 root 用户映射到宿主机非 root 用户

  • 增强安全性,防止容器逃逸


​2. Cgroups(控制组) - 资源限制​

Cgroups 限制容器对硬件资源的使用:

​(1) CPU 限制​

# 限制容器最多使用 50% 的 CPU
docker run -it --cpus="0.5" ubuntu# 或使用 CPU 份额(相对权重)
docker run -it --cpu-shares=512 ubuntu

​(2) 内存限制​

# 限制容器内存使用为 100MB
docker run -it --memory=100m ubuntu# 限制内存 + 交换分区
docker run -it --memory=100m --memory-swap=200m ubuntu

​(3) 磁盘 I/O 限制​

# 限制磁盘读写速率
docker run -it \--device-read-bps /dev/sda:1mb \--device-write-bps /dev/sda:1mb \ubuntu

​(4) Cgroups 子系统​

子系统

功能

Docker 参数示例

​cpu​

CPU 时间分配

--cpus, --cpu-shares

​memory​

内存使用限制

--memory, --memory-swap

​blkio​

块设备 I/O 限制

--device-read-bps

​devices​

设备访问控制

--device

​pids​

进程数限制

--pids-limit


​3. 联合文件系统(UnionFS) - 存储隔离​

Docker 使用联合文件系统实现镜像分层和容器可写层:

​(1) OverlayFS 工作原理​

容器层(可写)↓
联合视图(容器看到的文件系统)↓
镜像层(只读)← 镜像层(只读)← 基础镜像

​(2) 写时复制(Copy-on-Write)​

# 多个容器共享同一个镜像,只有修改时才复制
docker run -it ubuntu  # 容器1
docker run -it ubuntu  # 容器2 - 共享基础镜像层

​4. 安全隔离机制​

​(1) Capabilities(能力机制)​

# 默认删除危险的能力,如 CAP_SYS_ADMIN
docker run -it --cap-drop=ALL --cap-add=NET_BIND_SERVICE ubuntu

​(2) Seccomp(系统调用过滤)​

# 使用自定义 seccomp 配置文件
docker run -it --security-opt seccomp=profile.json ubuntu

​(3) AppArmor/SELinux​

# 使用 AppArmor 配置文件
docker run -it --security-opt apparmor=docker-default ubuntu

​5. 实际隔离效果演示​

​进程树视图​

宿主机进程树:
systemd(1)─┬─dockerd(1000)─┬─docker-containerd(1001)─┬─nginx(1002)  # 容器1│               │                          └─redis(1003)   # 容器2└─bash(500)                                           # 宿主机shell容器1内进程树:
nginx(1)─┬─nginx(10)└─nginx(11)容器2内进程树:  
redis(1)

​网络隔离示例​

# 宿主机
ip addr show docker0  # 显示 docker0 网桥# 容器1
docker run -d --name web nginx
docker exec web ip addr show  # 显示容器的 veth 接口# 容器2  
docker run -d --name db redis
docker exec db ip addr show  # 不同的网络命名空间

​6. 与虚拟机的对比​

特性

Docker 容器

虚拟机

​隔离级别​

进程级别

硬件级别

​启动速度​

秒级

分钟级

​性能损耗​

1-5%

15-30%

​镜像大小​

MB 级

GB 级

​隔离性​

较弱(共享内核)

强(完全隔离)

​适用场景​

应用隔离、微服务

完整操作系统隔离


​7. 总结​

Docker 通过 ​​Namespace + Cgroups + UnionFS​​ 三大核心技术实现隔离:

  1. ​Namespace​​:提供环境隔离(进程、网络、文件系统等)

  2. ​Cgroups​​:提供资源限制(CPU、内存、磁盘 I/O 等)

  3. ​UnionFS​​:提供存储隔离(镜像分层、写时复制)

这种设计使得容器既​​轻量快速​​(共享主机内核),又具备​​足够的隔离性​​(满足多应用部署需求),成为现代云原生应用的事实标准。

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

相关文章:

  • ThinkPHP8学习篇(八):数据库(四)
  • 专业商城网站设计制作wordpress用户中心制作
  • 加强住房公积金网站建设搜索推广的优势
  • 【BTC】比特币脚本
  • 人工智能吉他教学研究:基于Liberlive与TemPolor的产品与教学思考[特殊字符]
  • 电脑开机显示屏显示无信号怎么办 原因及解决方法
  • 怎么攻击织梦网站网站发布 图片看不到
  • ROS1 go2 vlp16 局部避障--3 篇
  • 【奇怪的bug】lua的nil不报错
  • 有哪些做短租的网站好浙江省建设厅网站查询
  • 南宁网站建设优势吉林省软环境建设办公室网站
  • 【数据结构】二叉树-图解深度优先搜索(递归法、迭代法)
  • 邯郸企业网站建设报价接收新网站如何做诊断
  • 做体力活的网站上海网站制作公司哪
  • Jenkins运维之路(Jenkins使用Mysql作为信息存储)
  • 爬虫访问第三方 HTTPS 网站时遇到的 SSL 异常处理
  • JavaWeb 课堂笔记 —— 22 登录校验
  • 整合营销传播案例广西网络优化seo
  • Mac电脑解决 npm 和 Yarn 安装时的证书过期问题
  • JavaScript继承详讲
  • 怎么理解ES的shard和segment
  • AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
  • 新乡网站关键词优化电商网站开发实战视频教程
  • 公司无网站无平台怎么做外贸wordpress检查php版本号
  • Spark核心Shuffle详解(二)ShuffleHandler
  • React Native启动性能优化实战:Hermes + RAM Bundles + 懒加载
  • 怎么做淘宝客个人网站wordpress可视化编辑插件下载
  • [C++项目框架]gflags和gtest的简单介绍
  • Vue2 和 Vue3 中使用 Vue Router 的详细过程
  • 微服务项目->在线oj系统(Java-Spring)-后台管理(2)