mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
4360 字
13 分钟
系列导读
2026-06-25

一、系列简介#

当你执行 docker run nginx 时,背后发生了什么?Docker 客户端把请求发给 dockerd,dockerd 调用 containerd,containerd 启动 containerd-shim,shim 调用 runc,runc 创建 Namespace、配置 Cgroup、挂载 OverlayFS、执行容器进程——一条调用链穿越了四个进程、三个抽象层、两个规范(OCI Image Spec + Runtime Spec)。

本系列从** Linux 内核的隔离机制**出发,系统剖析现代容器运行时的完整技术栈。Namespace 提供视图隔离,Cgroup 提供资源限制,OverlayFS 提供分层文件系统——这三者构成了容器的”三大基石”。在此基础上,OCI 规范定义了镜像格式和运行时接口的标准,runc 是 OCI Runtime Spec 的参考实现,containerd 是工业级容器运行时管理器,containerd-shim 解耦了容器生命周期与 daemon 进程。

但容器运行时的演进并未止步于 runc。gVisor 用用户态内核提供更强隔离,Kata Containers 用轻量级虚拟机实现硬件级隔离,Wasm 容器则开辟了全新的轻量级运行时方向。容器网络(CNI)、容器存储(CSI)、镜像构建(BuildKit)构成了容器生态的三大支柱。理解这些技术的原理与实现,是从”会用容器”到”掌控容器运行时”的关键跨越。

本系列覆盖 16 个章节,从”容器全景:从 chroot 到 OCI”到 Namespace/Cgroup/OverlayFS 深入,再到 OCI 规范、runc 源码、containerd 架构与 shim,然后是容器完整流程、安全、沙箱运行时、网络、存储、镜像构建、Wasm 容器,最后以综合实战构建迷你容器运行时收尾。每章配有可运行的代码示例与架构图,让你从容器用户进阶到容器运行时工程师。

每章开头都包含历史渊源前置知识两个部分:历史渊源讲述该主题从起源到现代的演进脉络,帮助你理解”为什么现在是这样设计的”;前置知识列出阅读本章需要的理论基础和前序章节链接,帮助你按需补课。建议先阅读前置知识中列出的章节,再进入当前章节的理论内容。

Note

本系列假设你已具备 Linux 系统编程基础(系统调用、进程管理、文件系统),了解 Docker 基本操作(docker run/build/pull)。如果你需要补课,推荐先阅读姊妹系列「从零剖析 Linux 操作系统」中的 Cgroups 与 NamespacesVFS 与文件系统 章节。

二、场景驱动阅读路线#

不想按部就班从第 1 章读到第 16 章?以下 5 条路线从你日常遇到的真实问题出发,按”问题在哪→底层原理→如何实现”的顺序串联章节。每条路线可独立阅读,前置依赖已在路线内标注。

路线总览#

flowchart TB subgraph 路线A[" 路线A:docker run 背后发生了什么"] A1[Ch01 容器全景] --> A2[Ch02 Namespace] A2 --> A3[Ch03 Cgroup] A3 --> A4[Ch04 OverlayFS] A4 --> A5[Ch09 完整流程] end subgraph 路线B[" 路线B:OCI 规范与运行时实现"] B1[Ch05 OCI规范] --> B2[Ch06 runc源码] B2 --> B3[Ch07 containerd架构] B3 --> B4[Ch08 containerd-shim] end subgraph 路线C[" 路线C:容器安全与隔离增强"] C1[Ch02 Namespace] --> C2[Ch10 容器安全] C2 --> C3[Ch11 沙箱运行时] end subgraph 路线D[" 路线D:容器网络与存储"] D1[Ch02 Namespace] --> D2[Ch12 容器网络] D2 --> D3[Ch13 容器存储] D3 --> D4[Ch14 镜像构建] end subgraph 路线E[" 路线E:全栈容器运行时工程师"] E1[Ch01 容器全景] --> E2[Ch02 Namespace] E2 --> E3[Ch03 Cgroup] E3 --> E4[Ch04 OverlayFS] E4 --> E5[Ch05 OCI规范] E5 --> E6[Ch06 runc源码] E6 --> E7[Ch16 综合实战] end subgraph 路线F[" 路线F:动手实践路线"] F1[Ch02·附 Namespace实践] --> F2[Ch03·附 Cgroup实践] F2 --> F3[Ch04·附 OverlayFS实践] F3 --> F4[Ch05·附 OCI Bundle实践] F4 --> F5[Ch10·附 安全审计] F5 --> F6[Ch12·附 网络搭建] F6 --> F7[Ch14·附 镜像优化] end style 路线A fill:#e3f2fd,stroke:#1565c0 style 路线B fill:#e8f5e9,stroke:#2e7d32 style 路线C fill:#fff3e0,stroke:#e65100 style 路线D fill:#fce4ec,stroke:#c62828 style 路线E fill:#f3e5f5,stroke:#6a1b9a style 路线F fill:#e8f5e9,stroke:#1b5e20

路线A:docker run 背后发生了什么#

场景:你每天都在用 docker run,但你知道容器进程是怎么创建出来的吗?Namespace 怎么隔离?Cgroup 怎么限制?文件系统怎么挂载?这条路线带你从用户态命令一路追踪到内核系统调用。

顺序章节为什么读这章
1Ch01 容器全景:从 chroot 到 OCI建立全景认知:容器技术的演进脉络、核心组件关系、关键概念定义
2Ch02 Linux Namespace 深入视图隔离:PID/Mount/Network/User 等 8 种 Namespace 的原理与实现
3Ch03 Cgroup v2 深入资源限制:CPU/内存/IO 的控制机制、Cgroup v2 统一层级设计
4Ch04 OverlayFS:容器文件系统分层存储:lowerdir/upperdir/whiteout/copy-up 的完整机制
5Ch09 容器完整流程:docker run 背后核心:从 docker CLI 到 runc 的完整调用链、每一步的系统调用

路线逻辑:先建立全景认知(Ch01),再深入三大内核机制——Namespace(Ch02)、Cgroup(Ch03)、OverlayFS(Ch04),最后在 Ch09 把所有知识串起来,完整追踪 docker run 的每一步。


路线B:OCI 规范与运行时实现#

场景:你想理解容器运行时的标准化接口和实现细节。OCI 规范定义了什么?runc 怎么实现 OCI Runtime Spec?containerd 怎么管理容器生命周期?shim 为什么存在?

顺序章节为什么读这章
1Ch05 OCI 规范详解标准接口:Image Spec 和 Runtime Spec 的完整定义、OCI Bundle 结构
2Ch06 runc 源码分析核心:libcontainer 架构、容器创建/启动的代码路径、与内核的交互
3Ch07 containerd 架构工业级管理:gRPC API、镜像管理、任务管理、插件体系
4Ch08 containerd-shim解耦设计:shim 的进程监督、升级安全、与 runc 的协作

路线逻辑:先理解 OCI 规范定义的接口标准(Ch05),再深入 runc 如何实现这些接口(Ch06),然后看 containerd 如何在 runc 之上构建工业级管理能力(Ch07),最后理解 shim 的解耦设计(Ch08)。


路线C:容器安全与隔离增强#

场景:你的容器跑着不可信代码,runc 的 Namespace+Cgroup 隔离够吗?seccomp 怎么限制系统调用?AppArmor 怎么限制文件访问?gVisor 和 Kata Containers 怎么提供更强隔离?

顺序章节为什么读这章
1Ch02 Linux Namespace 深入基础隔离:理解 Namespace 提供的隔离边界和已知逃逸方式
2Ch10 容器安全:seccomp/AppArmor/Capabilities核心:Linux 安全模块在容器中的应用、默认安全配置、rootless 容器
3Ch11 沙箱运行时:gVisor/Kata增强隔离:用户态内核、轻量级虚拟机、与 runc 的对比选型

路线逻辑:先理解基础隔离机制(Ch02),再学习 Linux 安全模块如何增强容器安全(Ch10),最后了解超越 runc 的沙箱运行时方案(Ch11)。


路线D:容器网络与存储#

场景:容器怎么通信?veth pair 和 bridge 怎么工作?CNI 插件做了什么?容器数据怎么持久化?CSI 插件怎么对接存储后端?镜像怎么构建?

顺序章节为什么读这章
1Ch02 Linux Namespace 深入Network Namespace 是容器网络的基础
2Ch12 容器网络核心:veth/bridge/iptables/CNI 的完整链路、网络模式对比
3Ch13 容器存储Volume/CSI/存储驱动:容器数据持久化的完整方案
4Ch14 镜像构建:BuildKitDockerfile/多阶段构建/缓存优化:从代码到镜像的工程实践

路线逻辑:先理解 Network Namespace 的隔离基础(Ch02),再深入容器网络实现(Ch12),然后学习存储持久化(Ch13),最后掌握镜像构建(Ch14)。


路线E:全栈容器运行时工程师#

场景:你要成为容器运行时领域的专家,从内核机制到规范标准到工业实现到前沿方向,全面掌握。这是最完整的路线。

顺序章节为什么读这章
1Ch01 容器全景全景认知
2Ch02 Namespace 深入视图隔离
3Ch03 Cgroup v2 深入资源限制
4Ch04 OverlayFS分层文件系统
5Ch05 OCI 规范详解标准接口
6Ch06 runc 源码分析运行时实现
7Ch16 综合实战核心:构建迷你容器运行时,将所有知识融会贯通

路线逻辑:这是最完整的路线,从全景(Ch01)到三大内核机制(Ch02→Ch03→Ch04)到规范标准(Ch05)到实现(Ch06),最后综合实战(Ch16)。


路线F:动手实践路线#

场景:你读完了理论,但还不知道怎么”动手验证”。这条路线串联各章的实践小节(·附、实践),用真实命令和输出验证理论知识。每个实践都可以独立运行,建议在虚拟机中操作。

顺序章节实践内容
1Ch02 Namespace ·附unshare 创建 UTS/PID/Network Namespace,观察隔离效果
2Ch03 Cgroup ·附用 Cgroup v2 文件系统接口限制 CPU/内存,观察 PSI 指标
3Ch04 OverlayFS ·附手工挂载 OverlayFS,验证 copy-up 和 whiteout 机制
4Ch05 OCI ·附从零构建 OCI Bundle,用 runc 运行容器
5Ch10 容器安全 ·附审计容器 Capabilities、只读文件系统、安全基线检查
6Ch12 容器网络 ·附ip netns + veth pair 搭建最小容器网络
7Ch14 镜像构建 ·附对比未优化和优化后的 Dockerfile,理解多阶段构建

路线逻辑:从内核机制实践(Namespace→Cgroup→OverlayFS)到运行时实践(OCI Bundle)到安全/网络/构建实践,逐步加深。每个实践都包含可运行的命令和真实输出,让你”看到”理论描述的现象。


路线交叉参考#

同一章节在不同路线中的关注点不同:

章节路线A 关注点路线B 关注点路线C 关注点路线D 关注点路线E 关注点路线F 关注点
Ch01核心:全景认知全景认知
Ch02视图隔离基础隔离边界Network NS视图隔离实践:unshare 创建 NS
Ch03资源限制资源限制实践:Cgroup v2 限制
Ch04分层文件系统分层文件系统实践:OverlayFS 挂载
Ch05OCI 标准接口标准接口实践:OCI Bundle 构建
Ch06核心:runc 实现运行时实现
Ch07containerd 管理
Ch08shim 解耦
Ch09核心:完整流程
Ch10核心:安全模块实践:安全审计
Ch11沙箱运行时
Ch12核心:网络实践:网络搭建
Ch13存储持久化
Ch14镜像构建实践:镜像优化
Ch15
Ch16核心:综合实战

三、知识导图#

以下导图展示 17 章知识之间的网络关系。与线性目录不同,这里强调跨技术的连接——Namespace 是容器网络和容器安全的基础,OverlayFS 是镜像构建和容器存储的桥梁,OCI 规范连接了镜像和运行时,runc 的实现依赖三大内核机制。

概念关系图#

graph TB subgraph 用户可见层[" 用户可见层 — 你能观察和操作什么"] DOCKER["Docker CLI<br/>docker run/build/pull"] K8S["Kubernetes<br/>Pod/Container 接口"] IMG["容器镜像<br/>nginx/alpine/ubuntu"] NET["容器网络<br/>端口映射/服务发现"] VOL["容器存储<br/>Volume/PV/PVC"] SEC["容器安全<br/>安全策略/扫描"] end subgraph 运行时层[" 运行时层 — 容器运行时的核心实现"] CTNRD["containerd<br/>Ch07"] SHIM["containerd-shim<br/>Ch08"] RUNC["runc<br/>Ch06"] OCI["OCI 规范<br/>Ch05"] BUILDKIT["BuildKit<br/>Ch14"] end subgraph 内核机制层[" 内核机制层 — 容器的三大基石"] NS["Namespace<br/>Ch02"] CG["Cgroup<br/>Ch03"] OVL["OverlayFS<br/>Ch04"] SECCOMP["seccomp<br/>Ch10"] APPARMOR["AppArmor<br/>Ch10"] end subgraph 增强与扩展层[" 增强与扩展层 — 超越 runc 的方案"] GVISOR["gVisor<br/>Ch11"] KATA["Kata Containers<br/>Ch11"] WASM["Wasm 容器<br/>Ch15"] CNI["CNI 插件<br/>Ch12"] CSI["CSI 插件<br/>Ch13"] end %% 用户可见 → 运行时 DOCKER --> CTNRD K8S --> CTNRD IMG --> OCI NET --> CNI VOL --> CSI SEC --> SECCOMP %% 运行时 → 内核机制 CTNRD --> SHIM SHIM --> RUNC RUNC --> NS RUNC --> CG RUNC --> OVL RUNC --> SECCOMP RUNC --> APPARMOR OCI --> RUNC BUILDKIT --> OVL BUILDKIT --> OCI %% 增强与扩展 GVISOR -.->|"替代 runc"| RUNC KATA -.->|"VM 隔离"| NS WASM -.->|"新运行时"| OCI CNI -.->|"Network NS"| NS CSI -.->|"Mount NS"| OVL style 用户可见层 fill:#e8eaf6,stroke:#283593 style 运行时层 fill:#e0f2f1,stroke:#00695c style 内核机制层 fill:#fce4ec,stroke:#880e4f style 增强与扩展层 fill:#fff3e0,stroke:#e65100

章节网络关系图#

graph LR Ch0["Ch0 导读"] --> Ch1["Ch1 容器全景"] Ch1 --> Ch2["Ch2 Namespace"] Ch1 --> Ch3["Ch3 Cgroup"] Ch1 --> Ch4["Ch4 OverlayFS"] Ch2 --> Ch5["Ch5 OCI规范"] Ch3 --> Ch5 Ch4 --> Ch5 Ch5 --> Ch6["Ch6 runc源码"] Ch6 --> Ch7["Ch7 containerd"] Ch7 --> Ch8["Ch8 shim"] Ch2 --> Ch9["Ch9 完整流程"] Ch3 --> Ch9 Ch4 --> Ch9 Ch6 --> Ch9 Ch7 --> Ch9 Ch2 --> Ch10["Ch10 容器安全"] Ch10 --> Ch11["Ch11 沙箱运行时"] Ch2 --> Ch12["Ch12 容器网络"] Ch4 --> Ch13["Ch13 容器存储"] Ch4 --> Ch14["Ch14 镜像构建"] Ch5 --> Ch14 Ch5 --> Ch15["Ch15 Wasm容器"] Ch6 --> Ch15 Ch2 --> Ch16["Ch16 综合实战"] Ch3 --> Ch16 Ch4 --> Ch16 Ch6 --> Ch16 Ch11 -.->|"替代 runc"| Ch6 Ch12 -.->|"Network NS"| Ch2 Ch13 -.->|"Mount/Overlay"| Ch4 Ch14 -.->|"OCI Image"| Ch5 Ch15 -.->|"OCI Runtime"| Ch6 style Ch0 fill:#bbdefb,stroke:#1565c0 style Ch1 fill:#ffcdd2,stroke:#c62828 style Ch6 fill:#c8e6c9,stroke:#2e7d32 style Ch9 fill:#ffe0b2,stroke:#e65100 style Ch11 fill:#fff9c4,stroke:#f9a825 style Ch16 fill:#b2dfdb,stroke:#00695c

知识关联参考表#

按四层模型组织:用户可见层运行时层内核机制层增强与扩展层。同一行的条目之间存在直接的知识依赖或概念映射。

用户可见概念对应章节运行时实现对应章节内核机制对应章节增强扩展对应章节
docker runCh09containerd→shim→runcCh07,Ch08,Ch06Namespace+Cgroup+OverlayFSCh02,Ch03,Ch04gVisor/KataCh11
容器镜像Ch14BuildKit+OCI Image SpecCh14,Ch05OverlayFS 分层Ch04
容器网络Ch12CNI 插件Ch12Network NamespaceCh02
容器存储Ch13CSI 插件Ch13Mount Namespace+OverlayFSCh02,Ch04
容器安全Ch10seccomp+AppArmor+CapCh10Namespace 隔离Ch02gVisor/KataCh11
资源限制Ch03runc 配置 CgroupCh06Cgroup v2Ch03
进程隔离Ch02runc 创建 NamespaceCh068 种 NamespaceCh02User NS rootlessCh10
镜像标准Ch05OCI Image SpecCh05Wasm 镜像Ch15
运行时标准Ch05OCI Runtime SpecCh05,Ch06Wasm 运行时Ch15

四、系列大纲#

以下是按章节编号排列的完整目录。建议结合上方的场景驱动阅读路线知识导图选择适合你的阅读顺序。

章节标题核心内容
0系列导读系列定位、场景路线、知识导图、环境搭建
1容器全景:从 chroot 到 OCI容器技术演进、核心组件关系、Docker/containerd/runc 架构全景
2Linux Namespace 深入8 种 Namespace 原理、unshare/clone/setns 系统调用、Namespace 继承规则
3Cgroup v2 深入Cgroup v2 统一层级、CPU/内存/IO 控制器、eBPF 扩展
4OverlayFS:容器文件系统lowerdir/upperdir、whiteout 机制、copy-up 语义、容器层叠模型
5OCI 规范详解Image Spec、Runtime Spec、Distribution Spec、OCI Bundle 结构
6runc 源码分析libcontainer 架构、容器创建/启动代码路径、与内核交互
7containerd 架构gRPC API、镜像管理、任务管理、插件体系、事件系统
8containerd-shimshim 进程监督、升级安全、与 runc 协作、task service
9容器完整流程:docker run 背后Docker→containerd→shim→runc 完整调用链、每步系统调用
10容器安全:seccomp/AppArmor/CapabilitiesLinux 安全模块、默认安全配置、rootless 容器、安全基线
11沙箱运行时:gVisor/Kata用户态内核、轻量级虚拟机、与 runc 对比选型
12容器网络veth/bridge/iptables/CNI、网络模式对比、网络命名空间
13容器存储Volume/CSI/存储驱动、数据持久化方案
14镜像构建:BuildKitDockerfile/多阶段构建/缓存优化/并行构建
15Wasm 容器:WasmEdge/WASIWasm 运行时、WASI 接口、与 OCI 集成、与 Linux 容器对比
16综合实战:构建一个迷你容器运行时用 Go 实现迷你容器运行时,综合运用 Namespace/Cgroup/OverlayFS

五、开发环境搭建#

Warning

以下环境搭建步骤基于 Ubuntu 22.04 LTS。其他发行版的包名和路径可能不同,请参考各项目官方文档。部分实验需要 root 权限,建议在虚拟机中操作。

Docker + containerd 环境#

# 安装 Docker(包含 containerd)
curl -fsSL https://get.docker.com | sh
# 验证 Docker 和 containerd 版本
docker version
ctr version
# 查看 containerd 配置
cat /etc/containerd/config.toml
# 启用 containerd 的 CRI 插件(Kubernetes 需要)
sudo sed -i 's/disabled_plugins = \["cri"\]/disabled_plugins = \[\]/' /etc/containerd/config.toml
sudo systemctl restart containerd
# 验证 CRI 插件
crictl info

runc 开发环境#

# 安装 Go
sudo apt install golang-go
# 或使用官方版本
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# 编译 runc
git clone https://github.com/opencontainers/runc
cd runc
make
sudo make install
# 验证安装
runc --version
# 手动创建 OCI Bundle 测试
mkdir -p /tmp/mycontainer/rootfs
cd /tmp/mycontainer
# 导出 rootfs
docker export $(docker create busybox) | tar -C rootfs -xvf -
# 生成 spec
runc spec
# 运行容器
sudo runc run mycontainer

容器安全工具#

# 安装安全审计工具
sudo apt install auditd apparmor-utils seccomp-tools
# 查看 AppArmor 状态
sudo aa-status
# 查看容器的 seccomp 配置
docker inspect --format '{{.HostConfig.SecurityOpt}}' <container>
# 使用 seccomp-tools 分析系统调用
seccomp-tools dump <command>
# 安装 gVisor(runsc)
curl -fsSL https://gvisor.dev/archive.key | sudo gpg --dearmor -o /usr/share/keyrings/gvisor-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/gvisor-archive-keyring.gpg] https://storage.googleapis.com/gvisor/releases release main" | sudo tee /etc/apt/sources.list.d/gvisor.list
sudo apt update && sudo apt install runsc
# 配置 Docker 使用 gVisor 运行时
sudo dockerd --add-runtime=runsc=/usr/bin/runsc

容器网络工具#

# 安装网络诊断工具
sudo apt install bridge-utils iptables dnsmasq
# 安装 CNI 插件
git clone https://github.com/containernetworking/plugins
cd plugins
./build_linux.sh
sudo mkdir -p /opt/cni/bin
sudo cp bin/* /opt/cni/bin/
# 查看网络命名空间
sudo ip netns list
# 查看 bridge 信息
bridge link
# 查看 iptables NAT 规则
sudo iptables -t nat -L -n -v
Note

Docker 安装后默认包含 containerd 和 runc,无需单独安装。如果你需要修改 runc 源码进行调试,建议从源码编译。gVisor 的 runsc 需要单独安装并注册为 Docker 运行时。

六、本系列的实践方法论#

本系列遵循 观察 → 原理 → 实现 → 验证 的学习方法:

  1. 观察:用 docker inspectctrrunc listnsentercgroupv2 等工具观察容器的实际状态,建立直观认知
  2. 原理:深入内核源码和规范文档,理解 Namespace/Cgroup/OverlayFS 的底层机制
  3. 实现:阅读 runc/containerd 源码,理解工业级运行时如何实现规范
  4. 验证:手动创建 OCI Bundle、用 Go 实现迷你容器运行时,验证对原理的理解

每章的「动手实践」部分都遵循这一方法论。先观察现象,再理解原理,然后阅读实现,最后动手验证。

Warning

容器运行时涉及大量内核接口和特权操作。在生产环境中修改容器安全配置前,务必理解其安全边界。本系列在每章都会标注相关风险。

七、推荐参考资料#

经典教材#

书籍作者特点
《Containers from Scratch》Liz Rice用 Go 从零构建容器,理解容器本质的入门首选
《Container Security》Liz Rice容器安全全景,从隔离机制到安全策略
《Kubernetes in Action》Marko LukšaK8s 实践全书,理解容器编排与运行时的关系
《Linux Kernel Development》Robert Love内核开发基础,理解 Namespace/Cgroup 的内核实现
《Understanding the Linux Kernel》Bovet & Cesati内核原理详解,进程/内存/文件系统的权威参考

在线资源#

调试与诊断工具#

  • docker inspect:查看容器详细配置(Namespace、Cgroup、安全策略)
  • ctr:containerd 命令行客户端,直接操作 containerd API
  • runc:OCI 运行时命令行工具,手动管理容器
  • nsenter:进入指定 Namespace 执行命令
  • seccomp-tools:分析 seccomp 过滤规则
  • aa-status:查看 AppArmor 配置状态
  • crictl:CRI 兼容运行时命令行工具

Tip

本系列的所有实践操作都可以在 Ubuntu 22.04 虚拟机中完成。建议使用 Vagrant 或 Multipass 快速创建开发环境,避免污染宿主系统。

准备好开始了吗?从 容器全景:从 chroot 到 OCI 开始你的容器运行时深入之旅吧!


参考#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

部分信息可能已经过时

相关文章 智能推荐
1
容器完整流程:docker run 背后
容器运行时 当你执行 docker run nginx 时,背后发生了什么?本章完整追踪从 Docker CLI 到容器进程启动的每一步——镜像拉取、OCI Bundle 生成、shim 启动、runc 创建、Namespace/Cgroup/OverlayFS 配置、容器进程执行,让你对 docker run 的每一步都了如指掌。
2
容器全景:从 chroot 到 OCI
容器运行时 从 1979 年的 chroot 到 2020 年代的 OCI 标准,容器技术走过了四十年的演进之路。本章建立容器运行时的全景认知——三大内核基石(Namespace/Cgroup/OverlayFS)、OCI 规范体系、Docker/containerd/runc 的架构关系,让你在深入细节前先看到完整的地图。
3
综合实战:构建一个迷你容器运行时
容器运行时 综合实战——用 Go 从零构建一个迷你容器运行时——实现 Namespace 隔离(PID/Mount/UTS/IPC/Network)、Cgroup 资源限制(CPU/内存)、OverlayFS 分层文件系统、OCI Bundle 解析,最终实现一个能运行容器的 minirunc。将前 15 章的知识融会贯通,从「理解原理」到「动手实现」。
4
runc 源码分析
容器运行时 runc 是 OCI Runtime Spec 的参考实现,也是 Docker/Kubernetes 默认的低层容器运行时。从零讲透 runc 的源码架构——libcontainer 核心库、容器创建/启动的代码路径、Namespace/Cgroup/OverlayFS 的内核交互、安全配置(seccomp/AppArmor/Capabilities),让你从「知道 runc 是什么」到「理解 runc 的每一行关键代码」。
5
为什么 Docker 使用分层镜像
技术科普 深入解析 Docker 镜像分层设计的原理,理解 UnionFS、OverlayFS 如何实现高效的镜像存储与分发。