- Namespace
- Cgroup
- UnionFS
docker 的实现,主要依赖 linux 的 namespace、cgroup 和 unionFS 三种技术实现,达到容器的环境隔离、资源控制和镜像打包。
Namespace
Namespace | 隔离内容 |
---|---|
UTS | 主机名与域名 |
IPC | 信号量、消息队列和共享内存 |
PID | 进程编号 |
Network | 网络设备、网络栈、端口等 |
Mount | 挂载点(文件系统) |
User | 用户和用户组 |
Cgroup
- blkio: 为块设备设定输入输出/限制,比如物理驱动设备(包括磁盘、固态硬盘、USB等)
- cpu: 使用调度程序控制任务对 CPU 的使用
- cpuacct: 自动生成 cgroup 中任务对 CPU 资源使用情况的报告
- cpuset: 为 cgroup 中的任务分配独立的 CPU 和内存
- devices: 可以开启或关闭 cgroup 中任务对设备的访问
- freezer: 可以挂起或恢复 cgroup 中的任务
- memory: 可以设定 cgroup 中任务对内存使用量的限定,并且自动生成这些任务对内存资源使用情况的报告
- perf_event: 使用后使 cgroup 中的任务可以进行统一的性能测试
- net_cls: Docker 没有直接使用它,它通过使用等级识别符(classid)标记网络数据包,从而允许 Linux 流量控制程序识别从具体 cgroup 中生成的数据包