用 Go 组装迷你容器运行时:把积木拼起来

💡 原文中文,约500字,阅读约需2分钟。
📝

内容提要

miniruntime 创建容器的过程包括:创建 cgroup、准备 OverlayFS、通过 clone() 创建子进程并初始化环境、将子进程加入 cgroup、配置网络,最后保存状态到 state.json。启动容器时,读取状态文件并发送启动信号。

🎯

关键要点

  • 创建 cgroup

  • 准备 OverlayFS (upper + work + merged)

  • 通过 clone() 创建子进程并初始化环境

  • 子进程执行 init(reexec)并进行 pivot_root 到 rootfs

  • 挂载 /proc, /dev, /sys

  • 子进程阻塞等待 start 信号

  • 父进程将子进程 PID 加入 cgroup

  • 配置网络(veth + bridge)

  • 保存状态到 state.json

  • 读取 state.json 启动容器

  • 通过 pipe 发送 start 信号给 init 进程

  • 更新状态为 'running'

➡️

继续阅读