Post

Docker工作原理

Docker工作原理

整体架构

img.png

docker的实现原理本质是:Namespace + Cgroups + UnionFS

Namespace 隔离

Linxu Namespace提供了一个隔离的环境,使每个容器看起来像独立系统。

Namespace作用
PID进程隔离
NET网络隔离
Mount文件系统隔离
IPC进程通信隔离
UTShostname隔离
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.