打开Proxmox的创建菜单,虚拟机永远排在第一位。教程这么教,老玩家也这么推荐——安全、稳妥、出了问题好排查。但我跑了几年家庭服务器后发现一个规律:几乎所有服务,最后都从虚拟机迁到了容器里。Caddy、Affine、Immich、Jellyfin前端,还有那些零零碎碎需要常驻后台的Linux守护进程,无一例外。
不是虚拟机不能用,是算账之后发现不划算。
先厘清一个容易混淆的概念。"容器"其实指两种完全不同的东西。系统容器(LXC、LXD、Incus)像微型Linux服务器——SSH进去、跑systemd、装软件包、长期维护,体感上就是一台小机器。应用容器(Docker)通常从镜像跑单一服务,设计哲学是随时重建、替换、丢弃。两者工作流迥异,但底层逻辑一致:隔离的Linux用户空间,共用宿主内核。
对从虚拟机转过来的人,LXC是最顺的坡。它像一台微型虚拟机,直到你发现它启动速度快得离谱。容器性能接近原生,空闲时内存占用极低,配合ZFS或btrfs的写时复制,快照成本几乎可以忽略。某些场景虚拟机仍有优势,但数量比你想象的少。
核心差距来自一个架构选择:谁的内核在干活。
虚拟机虚拟的是"机器"——这个词背后是一整套开销。每个客户机都要启动自己的内核,运行在虚拟CPU、虚拟网卡、虚拟块设备之上,操作系统需要被说服"这台机器归你管"。容器不玩这套。它用Linux的命名空间(namespaces)和控制组(cgroups)给工作负载一个私有的系统视图,实际跑在宿主内核上。没有芯片组模拟,没有客户内核,典型虚拟机的开销被大幅削减。
对典型的家庭实验室负载,容器跑起来和裸机差距小到可以忽略。KVM虚拟机这些年进步很大,但"作为虚拟机存在"本身就需要更多资源。IBM十年前那份容器对比KVM的论文至今被引用,原因很实在:Linux负载跑在Linux宿主上,容器几乎每项测试都持平或优于虚拟机。具体数字因负载和硬件而异,但结论没变。
我个人感受最深的是空闲成本。空闲的虚拟机仍在运行完整的客户内核、初始化系统和后台服务,哪怕没有实际工作。空闲的LXC可以压到极低,因为它不需要启动第二套操作系统。
家庭服务器的资源不是无限的。当你同时跑十几个服务,每个省下的内存和CPU周期都会累积。虚拟机给的"安全感"很多时候是惯性,而容器的数学优势是真实的。
热门跟贴