Docker工作原理
Docker工作原理
整体架构
docker的实现原理本质是:Namespace + Cgroups + UnionFS
Namespace 隔离
Linxu Namespace提供了一个隔离的环境,使每个容器看起来像独立系统。
| Namespace | 作用 |
|---|---|
| PID | 进程隔离 |
| NET | 网络隔离 |
| Mount | 文件系统隔离 |
| IPC | 进程通信隔离 |
| UTS | hostname隔离 |
| USER | 用户隔离 |
Cgroups 资源限制
对 CPU、内存、磁盘 I/O 和网络带宽等资源进行限制和优先级控制。
UnionFS 文件系统
UnionFS将多个文件系统叠加成统一视图。最常见的是 overlay2。
写时复制(Copy-on-Write):当容器修改文件时,才会复制到容器层,节省空间。
标记删除低层(Image | Base Layer)文件:底层文件不会真正删除,而是标记为删除。
| 层级 | 说明 | 是否可写 |
|---|---|---|
| Container Layer | 容器运行时新增 | 可读写 |
| Image Layer | 每条 Dockerfile 指令生成一层 | 只读 |
| Base Image | 基础系统,如 ubuntu | 只读 |
网络实现
docker 默认使用桥接网络(bridge),每个容器分配一个虚拟网卡 veth0,与宿主机docker0 bridge通信。也支持host和overlay等网络模式。
端口映射是通过iptables实现的
1
2
3
4
5
6
7
container
│
veth0
│
docker0 bridge
│
host
This post is licensed under CC BY 4.0 by the author.
