docker容器通过什么隔离
Docker容器主要通过以下几种Linux内核技术实现隔离:
Namespaces(命名空间) - 提供不同层次的系统资源隔离:
- PID namespace:进程隔离(每个容器有自己的init进程/PID 1)
- Network namespace:网络栈隔离(独立IP、端口、路由表等)
- Mount namespace:文件系统挂载点隔离
- UTS namespace:主机名和域名隔离
- IPC namespace:进程间通信资源隔离
- User namespace:用户和用户组ID隔离(需内核支持)
Control Groups (cgroups) - 资源限制和审计:
- 限制CPU、内存、磁盘I/O等资源使用
- 统计资源使用情况
- 设置进程优先级
文件系统隔离:
- 联合文件系统(UnionFS如overlay2)实现分层镜像
- 每个容器有自己独立的文件系统视图
- 通过chroot提供根目录隔离
其他安全隔离:
- Seccomp:限制容器内可用的系统调用
- Capabilities:细粒度的root权限划分
- SELinux/AppArmor:强制访问控制
- 设备隔离(默认无法直接访问主机设备)
网络隔离:
- 默认通过docker0网桥创建虚拟网络
- 支持多种网络驱动(bridge/host/none/macvlan等)
- 每个容器有独立网络栈和IP地址
注意:容器与虚拟机不同,所有容器共享主机内核,因此隔离性弱于虚拟机。如需更强隔离,可考虑Kata Containers/gVisor等方案。