Docker是云原生核心,下面我重点详解Docker工作原理@mikechen
Docker
Docker ,是目前最流行的容器化平台。
它能将应用及其所有依赖打包成一个轻量级、可移植的“容器”,实现“一次构建,到处运行”。

Docker 作为轻量级容器化平台,已成为现代软件交付与运维的基石。
其关键价值在于以隔离、可移植与高效的方式封装应用及其运行环境,促成持续集成与微服务架构的广泛采用。
Docker架构
Docker 采用客户端-服务器(C/S)架构,整体结构如下:

Docker 采用客户端(CLI 或 API)与守护进程(dockerd)分离的设计。
客户端发出操作请求,守护进程负责镜像管理、容器调度与底层调用(内核接口、存储、网络)。
RESTful API 提供自动化与编排工具(如 Docker Compose、Kubernetes)的集成接口。
Docker工作原理
Docker 的工作原理可以概括为:它不是“虚拟出一台完整机器”。
而是利用宿主机内核提供隔离与资源控制能力,把应用、依赖和运行环境封装成一个轻量级容器。

其核心技术主要是 Linux 的 namespace、cgroups 和分层文件系统。
再配合 Docker Engine 的客户端-守护进程架构来完成镜像构建、容器运行和分发管理 。
Namespace
负责“看起来像独立系统”,它把进程、网络、挂载点、用户、主机名等资源隔离开,让容器内进程以为自己在独立环境中运行 。
Namespaces 让一个进程“看不见”其他进程的资源,实现6 种隔离:
|
Namespace 类型
|
作用
|
说明
|
|---|---|---|
|
PID
|
进程 ID 隔离
|
容器内 PID=1,独立进程树
|
|
Network
|
网络隔离
|
独立网卡、IP、端口、路由表
|
|
Mount (MNT)
|
文件系统挂载隔离
|
容器有自己的根目录
|
|
UTS
|
主机名/域名隔离
|
容器可设置独立 hostname
|
|
IPC
|
进程间通信隔离
|
独立信号量、消息队列
|
|
User
|
用户/组 ID 隔离
|
容器内 root ≠ 宿主机 root
|
cgroups
Namespaces 只负责“隔离看什么”,Cgroups 负责“能用多少”。

它限制容器的 CPU、内存、IO、进程数等资源,避免某个容器把宿主机资源耗尽 。
关键参数示例:
- cpu.cfs_quota_us:CPU 时间配额;
- memory.limit_in_bytes:内存上限;
- blkio.weight:块设备 I/O 权重;
Union FS / 分层文件系统

负责“镜像可复用”,镜像由多层只读层叠加组成。
容器启动后再加一层可写层,因而能实现高效构建、共享与增量分发 。
libcontainer / runc
负责“真正创建容器”,Docker 最终会把容器创建动作交给底层运行时去调用内核能力。
完成 namespace、cgroups、rootfs 等配置 。