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)进一步扩展了这些技术。