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.stat、memory.stat)或使用 pidstat 等工具来实时监控这些指标。 |
| 优先级控制 | CPU、内存、块IO、网络 | 在系统资源紧张时,cgroups 可以根据配置的权重决定资源分配的先后顺序和比例。 |
| 进程控制与隔离 | 除了命名空间做隔离,Cgroups 也会对进程做生命周期控制,覆盖2类控制能力:
|
cgroups 提供了对进程组生命周期的批量管理以及运行环境的隔离能力。 |
浙公网安备 33010602011771号