在Proxmox虚拟环境(PVE)里跑Docker,到底该用虚拟机(VM)还是LXC容器?这个问题我纠结了好几年,直到我开始用一些配置极低的“电子垃圾”设备搭建自托管工作站,才意识到答案远非非黑即白。

如果你刚接触Proxmox,可能只是想找个熟悉的方式来部署各种开源工具;或者你遇到了某个冷门服务,它既没有现成的LXC模板,也没法在Proxmox上以OCI容器格式安装。这时候,Docker就成了绕不开的选择。

打开网易新闻 查看精彩图片

虚拟机方案:稳妥但吃配置

在很长一段时间里,我都坚持在虚拟机里跑Docker,原因很充分:只要有一台8核、至少8GB内存的机器,我就能轻松创建一个Ubuntu Server、DietPi或Arch Linux虚拟机,装上标准的Docker Engine,然后开始折腾各种容器项目,完全不用担心底层虚拟机的性能开销。

这也是Proxmox官方文档推荐的方式。就我个人体验而言,虚拟机方案几乎没有出过问题——包括我曾经在几台虚拟机之间搭建的Swarm集群,纯粹是为了在把服务迁移到单板计算机(SBC)之前练练手。

相比之下,LXC方案在论坛上经常被吐槽:网络栈容易出问题、从Proxmox备份服务器(PBS)恢复快照后会出现GID和PID不匹配的情况。网络共享更是另一个坑,要在嵌套容器里挂载SMB和NFS共享,得绕不少弯路。

LXC的隐患:安全与兼容性

更麻烦的是,Proxmox 9.1升级后开始出现AppArmor问题,导致不少用户的LXC容器里的Docker直接崩溃。从安全角度看,嵌套容器也不理想——即使是在非特权LXC里,Docker容器依然运行在一个能访问Proxmox内核的环境中,而不是像虚拟机那样被隔离得干干净净。

所以,在我的主力自托管工作站上,我依然坚持用虚拟机方案,毕竟我不想整天排查容器故障。

低配设备改变了我的想法

但当我开始把一些配置惨不忍睹的老设备改造成自托管节点时,情况变了。这些“电子垃圾”级别的硬件,跑虚拟机实在吃力,而LXC的开销要小得多。这时候,LXC方案的优势就体现出来了。

当然,这并不意味着LXC方案可以无脑用。如果你决定走这条路,必须权衡风险并做好防护措施。比如,确保LXC配置正确、及时更新补丁、避免在容器里运行需要特殊权限的服务。

结论:按硬件和使用场景选

折腾这么多年,我的最终结论是:在Proxmox上跑Docker的最佳方式,完全取决于你的硬件配置和使用场景。硬件充裕、追求稳定,虚拟机方案是省心之选;硬件紧张、想榨干每一分性能,LXC方案值得一试,但前提是你愿意承担额外的配置和安全风险。

没有放之四海而皆准的答案,找到适合自己那台机器的方案,才是正解。