Docker 架构与核心原理深度解析:容器到底是怎么实现的?

很多人把 Docker 理解为"轻量级虚拟机"。

这是一个非常不严谨的说法。

Docker 本身并不是容器技术的创造者,它只是把 Linux 内核已有的能力工程化、产品化。要理解 Docker,必须回到内核层面。

本文将从以下几个方面展开:

  1. 容器与虚拟机的本质区别

  2. Namespace 隔离机制

  3. Cgroups 资源控制

  4. UnionFS 分层文件系统

  5. Docker Engine 架构解析

  6. Docker 与 containerd 的关系


一、容器 vs 虚拟机:本质差异

虚拟机依赖 Hypervisor,在物理机上虚拟出完整硬件环境,每个虚拟机都运行一个完整的 Guest OS。

典型架构如下:

物理机 → Hypervisor → Guest OS → 应用

而容器架构则是:

物理机 → Host OS → 容器(共享内核)→ 应用

关键差异在于:容器共享宿主机内核。

这带来三点核心影响:

  1. 启动速度快(无需启动完整 OS)

  2. 资源开销小

  3. 隔离强度依赖内核机制

Docker 只是将 Linux 提供的隔离与资源控制能力封装成可操作的接口。


二、Namespace:进程隔离的核心机制

Namespace 是 Linux 内核提供的资源隔离机制。

每个容器运行在独立的 Namespace 中。

常见类型:

  • pid:进程隔离

  • net:网络栈隔离

  • mnt:文件系统挂载点隔离

  • uts:主机名隔离

  • ipc:进程通信隔离

  • user:用户映射隔离

举例说明:

当容器内执行 ps aux 时,你看到的只是当前 pid namespace 下的进程,而不是宿主机全部进程。

这意味着:

容器本质上是一组被隔离的进程,而不是一台"虚拟机器"。

这也是容器轻量化的根本原因。


三、Cgroups:资源控制的底层实现

隔离不等于限制。

Namespace 解决"看不见",Cgroups 解决"用多少"。

Cgroups(Control Groups)用于限制:

  • CPU 使用率

  • 内存使用

  • IO 带宽

  • 进程数量

  • 网络带宽

当你执行:

docker run -m 512m --cpus=1 nginx

本质上是 Docker 在底层创建了对应的 cgroup 控制组,并将容器进程加入该组。

在 Kubernetes 体系中,容器资源限制依然依赖 Cgroups。


四、UnionFS:镜像分层的关键

Docker 镜像之所以体积小、可复用,是因为采用了分层文件系统。

常见实现包括:

  • aufs(早期)

  • overlay2(主流)

UnionFS 的核心思想:

多层只读层 + 一层可写层

每次 Dockerfile 中执行一条指令,就会生成一个新的镜像层。

例如:

FROM ubuntu

RUN apt update

RUN apt install nginx

会产生多个 layer。

容器运行时:

底层镜像只读

最上层添加一层可写层(copy-on-write)

这使得:

  1. 镜像可以复用

  2. 传输效率高

  3. 构建速度快

但也带来一个问题:

层数过多会导致镜像体积膨胀。


五、Docker Engine 架构解析

Docker 的整体架构可以拆分为三部分:

  1. CLI

  2. REST API

  3. daemon

工作流程如下:

docker run → CLI → REST API → dockerd → containerd → runc

核心组件包括:

  • dockerd:守护进程

  • containerd:容器运行管理

  • runc:真正创建容器的低级运行时

这里涉及一个重要组织:

Open Container Initiative

OCI 制定了容器运行时标准。

Docker 后期将底层运行时抽象为符合 OCI 标准的结构,使得 runc 成为标准实现。


六、Docker 与 containerd 的关系

早期 Docker 是一个大而全的系统。

后来架构拆分:

  • Docker 负责镜像管理、构建、CLI

  • containerd 负责容器生命周期管理

  • runc 负责真正调用内核接口

Kubernetes 在 1.24 版本之后移除了 dockershim,直接对接 containerd。

这说明:

Docker 更像一个"开发者工具平台",

containerd 才是纯粹的容器运行时。


七、总结:Docker 本质是什么?

Docker 不是虚拟机技术。

它是:

Namespace + Cgroups + UnionFS + OCI 标准 的工程整合。

换句话说:

容器不是一个"迷你操作系统",

它只是被精细隔离与控制的一组进程。

理解这一点,后面学习:

  • 容器网络

  • 容器存储

  • Kubernetes 调度

  • 资源限制

都会变得非常清晰。

相关推荐
智购科技无人售货机工厂店2 分钟前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
Ruiery14 分钟前
Linux 6.6内核 PCIe 深度解析(十):PCIe Port Driver(portdrv)— 一个物理 Port,拆出五个逻辑服务
linux·运维·服务器
运维行者_1 小时前
ISP 企业级带宽计费怎么做?网络流量计费的 6 大核心能力
运维·服务器·网络·数据库·支持向量机·接口隔离原则
数安旭说1 小时前
企业终端行为审计建设:本地审计 + 网络审计构建完整溯源取证体系
运维·数据安全·软件需求·溯源·审计·网络审计
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
10mAh3 小时前
【Linux】CPU 100% 怎么排查?——top、pidstat、jstack 到线程定位实战
linux·运维·服务器
LRL_3 小时前
深入浅出 Kubernetes 控制器:Deployment 与 StatefulSet 核心区别全景图
云原生·容器·kubernetes
!chen3 小时前
客户环境 Nginx 配置流式报表与超时排查
运维·nginx
起名真的太难了4 小时前
Docker 项目部署
docker·容器·eureka
狼与自由4 小时前
docker 安装milvus
docker·milvus