一个应用部署在哪层上是个很难的决定,所以我决定列一套选择器

选择 VM 的理由

  • 非 Linux 的,内核不同的
  • 需要 Linux 特权的
  • 在玩火,需要隔离的

选择 LXC 的理由

  • 支持 Linux 的
  • 没有提供 docker 安装方式的应用
  • 长期运行,不怎么更新的基础设施服务
  • 硬件经常变化的
  • 需要开机自启的
  • 需要可交互环境的
  • 需要保持持久化变更的(如修改系统文件)
  • 需要系统级别备份功能的
  • 应用数据散落各处的,靠挂目录不够的
  • 需要限制资源用量的
  • 计划用 DHCP 获取 IP 地址的
  • 想要个简单的资源使用情况记录(但没有报警)

选择 Docker 的理由

  • 版本经常变更的
  • 一次性即用即抛的
  • 需要多版本共存的
  • 可自动化、脚本式管理的(LXC 打包镜像流程复杂)
  • 应用数据仅一个文件夹可以搞定的
  • Proxmox VE Scripts 上没有的
  • 不想要整个系统,只运行应用(LXC 会启动自己的 init 进程,有 DHCP / console 等进程重复占用资源)

各家都能实现

必须得长时间运行的/系统启动时运行的/和系统网络相关的
需要硬件资源直通的
有定时任务的
经常要登入上去的
多个进程的

若是真想要以 Docker 为基座部署所有服务,那就不会把 Docker Daemon 放在 LXC、VM 上,而是直接 Bare Metal 放在 PVE 主机上以 Unprivileged 模式部署。因为中间多的一层总觉得很蠢,单节点环境也用不上迁移、备份的功能。

至于如何安装 Docker,就如 LXC vs LXD vs Proxmox Containers vs Docker - FAQ - Proxmox VE 所说,最好是在独立的 VM 中安装,既能降低攻击面,又能保留正真操作系统所需的特权功能。

选择举例

应用选择原因
Docker DaemonVM需要特权
OpenWrtLXC轻量、版本不常变更、架在多张网卡之间
SQL DatabaseLXC基础服务
PKI ServiceLXC需要注册到 DHCP 上
Hermes AgentLXC需要给他一个完整的运行环境,当然 VM 更好
Home AssistantDocker需要 HACS 扩展,而 LXC 无法提供
OpenListDocker就是个普通的 Web APP,也经常更新

总结就是,需要时刻在线(断电重启后也自启动),需要在线备份的应用选择 LXC,其余应用都是 Docker。