Docker 使用多种底层技术来实现容器化,核心依赖于 Linux 内核的特性和一些关键组件。以下是主要技术及其作用:
PID
:隔离进程 ID(容器内进程认为自己是 PID 1)。Network
:独立网络栈(IP、端口、路由表等)。Mount
:隔离文件系统挂载点。UTS
:隔离主机名和域名。IPC
:隔离进程间通信(如消息队列)。User
:隔离用户和用户组(容器内外的 UID/GID 可不同)。memory.limit_in_bytes
)。cpu.shares
)。OverlayFS
(默认):通过 lowerdir
(镜像层)和 upperdir
(容器可写层)合并视图。AUFS
、btrfs
、zfs
(早期或特定场景使用)。/
)。containerd
(现为独立项目)和 runc
(基于 OCI 标准)。runc
:参考实现,负责创建符合 OCI 规范的容器。containerd
:管理容器生命周期(启动/停止/监控)。bridge
:默认的虚拟网络(通过 docker0
网桥和 veth pair
)。host
:共享主机网络栈。overlay
:跨主机的容器通信(如 Swarm 集群)。CAP_SYS_ADMIN
)。mount()
)。Docker Registry
(如 Docker Hub)分发镜像。manifest.json
+ 分层文件)。json-file
或 Fluentd
等驱动收集日志。docker stats
)。virtio
)模拟 Linux 内核。HyperKit
(基于 xhyve)。Docker 的容器化本质是基于 Linux 内核的隔离机制(Namespaces + Cgroups)和分层文件系统(OverlayFS),配合容器运行时(如 containerd
)和网络/安全组件,实现轻量级、可移植的虚拟化环境。现代容器生态(如 Kubernetes)进一步扩展了这些技术。