docker的三大关键技术

一、联合文件系统

原理说明:

  docker采用联合文件系统技术(OverlayFS / AUFS),镜像分层 + 写时复制(cow)实现数据的读写。docker的存储可以理解分为三层

  

层级名称 说明 物理位置
Merge Layer(联合挂载点) 统一视图 统一视图
upper layers(可写层) 所有的写入都在这一层发生,如果写入的数据是在只读层里面,会触发写时复制技术,会先将只读层的数据拷贝到可写层,然后在可写层里面进行修改 最上层(容器层)
lower layers(只读层) 完全只读,读取数据的时候会先查看可写层有没有数据,没有数据才会查看只读层有没有数据 最下层(镜像层)

  

 

 

 

 

二、 命名空间(NameSpace)

  Linux 内核通过六种类型的命名空间实现进程对系统资源的视图隔离,每个命名空间独立管理一类全局资源,使不同进程组拥有“独立操作系统”的错觉。

 
命名空间类型 隔离资源 核心作用
PID 进程ID 每个命名空间内进程 ID 从 1 开始,容器内 PID 1 不可见宿主机其他进程
Network 网络栈 独立的网卡、IP 地址、路由表、防火墙规则、端口监听空间
Mount 文件系统挂载点 独立的根文件系统视图,可挂载不同目录,实现容器内文件系统隔离
UTS(UNIX Time-sharing System Namespace 主机名和域名(域名NIS可以忽略) 每个命名空间可设置独立的 hostname 和 domainname
IPC(Inter-Process Communication 进程之间的通信 隔离 System V IPC(共享内存、信号量)和 POSIX 消息队列
User 用户与组 ID 映射容器内 root(UID 0)到宿主机非特权用户,提高安全性

 

 

 

 

 

 

 

三、Cgroups(控制组)

  Cgroups 是 Linux 内核提供的一种机制,专门用来限制、记录和隔离进程组所使用的物理资源。Linux 内核是从 4.5 版本开始正式支持 cgroup v2 的。而且系统内可能默认是使用的V1版本,Cgroups v1和v2在架构上有核心区别:v1是多子系统独立层级结构,资源控制分散在不同目录;v2是统一层次结构,所有资源控制通过单一目录统一管理,解决了v1的资源冲突和管理复杂问题。可以按照控制器的维度去整理限制的资源。

/sys/fs/cgroup

核心能力 资源类型 说明
资源限制 CPU、内存、网络、磁盘IO、还可以限制 RDMA 资源、网络设备访问权限以及进程创建的数量(pids子系统)等 cgroups 可以为进程组设置各类系统资源的“硬上限”,防止单个进程过度消耗资源导致系统崩溃或拖垮其他服务。
资源统计 CPU、内存、IO、进程数量统计、RDMA 资源统计、设备访问统计、网络资源统计 管理员可以通过读取 cgroup 目录下的特定统计文件(如 cpu.statmemory.stat)或使用 pidstat 等工具来实时监控这些指标。
优先级控制  CPU、内存、块IO、网络 在系统资源紧张时,cgroups 可以根据配置的权重决定资源分配的先后顺序和比例。
进程控制与隔离  除了命名空间做‌隔离‌,Cgroups 也会对进程做‌生命周期控制‌,覆盖2类控制能力:
  1. ‌进程冻结控制‌:可以批量暂停(冻结)/恢复整个控制组的所有进程,方便做容器迁移、资源腾挪。
  2. ‌进程回收控制‌:删除cgroup时,会自动向组内所有进程发送终止信号,避免出现孤儿进程残留。
cgroups 提供了对进程组生命周期的批量管理以及运行环境的隔离能力。
posted on 2026-06-04 15:40  梅梅酱~  阅读(6)  评论(0)    收藏  举报