标签:# 系统工程

砍掉 runc 与 shim:Kiri 如何用 10 MB 定制内核和单线程 Rust PID 1 将容器启动压进 2.55 毫秒

在桌面端跑容器,为什么一个最简单的 alpine 退出命令在 Docker Desktop 上要耗费 213 毫秒,在号称极速的 OrbStack 上也要 380 毫秒?最近我通读了在 GitHub 上迅速蹿红的 Rust 开源容器运行时 Kiri(名字源自伊博语 ntakịrị,意为“微小”)的全套源码。它用令人惊叹的系统工程克制给出了一份硬核答案:通过彻底砍掉 dockerd、containerd、containerd-shim 与 runc 四层传统抽象,配合 10.2 MB 极限裁剪内核与单线程 Rust PID 1 代理,Kiri 将 Docker Engine API 级别的容器全生命周期耗时压进了 2.55 毫秒,守护进程常驻内存更是压缩到 9.7 MB。

更让我意外的是,Kiri 不只是一套兼容 docker CLI、Compose、Buildx 与单节点 Kubernetes 的跨平台引擎(横跨 macOS、Windows WSL2 与原生 Linux),它在最新版本中还直接内置了零依赖的原生系统 WebKit 界面、38 种语言(含 RTL 排版)以及一套完整替代 Ngrok 的多通道公网隧道协议 kiri share。本文将从代码层面逐一拆解这套系统是如何在毫厘之间压榨出两个数量级的性能差距的。