用 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'
➡️