kcell:Docker 应用,每个跑在一台小虚拟机里
能得到什么
- 原封不动的 Docker:官方静态二进制(Docker 29.8、Compose 5.5),Compose 文件直接能用。
- 18 个应用模板(Jellyfin、Nextcloud、Immich 等),或者自己的 Compose 文件。kcell 由 keelOS 自己建,网络、CPU、内存、磁盘都用缺省值。
- 在自己的电脑上用
docker context create填一个 ssh 地址,再docker compose up -d,和连任何一台 Linux 机器一样。 - 卷是宿主上的 ZFS dataset,文件在宿主上直接看得见。端口发布在 kcell 自己的地址上,缺省也转一份到宿主的地址。
- 停下一台 kcell 会存检查点,再开还是原来的样子。
怎么做的
Docker 要的是 Linux 内核,FreeBSD 的 jail 和 Linux 兼容层都给不了。所以 kcell 是一台 bhyve 虚拟机:我们自己配的 Linux 7.2 内核、一个很小的 init、一份只读的系统(压缩后 86 MB),同一台宿主上的所有 kcell 共用这份系统。
卷和系统是宿主的 dataset,经 virtio-fs 共享进去;只有 Docker 的镜像层放在一块稀疏的 zvol 上(缺省 40 GB)。从 start 到 Docker 可用 3.9 秒,从检查点恢复 1 秒。
实测
- 宿主上的卷(virtio-fs):顺序写 742–777 MB/s,4K 随机写 22–23k IOPS;数据库和 npm 的速度和本地盘一样。
- 核显:SR-IOV 的一个 VF(12 代及以后的 Intel)让 kcell 把 1080p 转成 720p HEVC,73 fps。
限制
- 内存是整台 kcell 算的,改内存要冷重启一次(几秒)。
- 大量小文件(解包、编译)在宿主卷上慢 5–6 倍,这类活放 Docker 自己的卷。
- 只有 x86。没有 Swarm 的加密 overlay 网络,里面没有 SELinux、AppArmor。kcell 不能开嵌套虚拟化。
- 共用核显要 12 代及以后的 Intel 核显,AMD 和 NVIDIA 没做。
- 把 keelNAS 的共享当媒体库,表单里有,但还没在真机上从头跑过。