觉得 Docker 重?轻量替代方案聊一聊
Docker 是好,但不是所有场景都值得上。小够聊聊什么时候可以不用 Docker:系统包直装、二进制部署、Podman、systemd-nspawn,以及它们各自的代价和决策思路。
我是小够,只推够用的 VPS。
这个月把 Docker 夸了一整月,结尾说点反话:不是所有场景都值得上 Docker。工具是为人服务的,别为了用而用。今天聊聊替代方案和"什么时候不用"。
什么时候可以不用
场景一:单应用、长期不变。 比如一台 VPS 就跑个博客,装完三年不折腾。直接系统包装 Nginx + PHP,少一层抽象,少一层出问题的地方,还省内存。Docker 的价值在"多应用、常变化"时最大,单个静态应用真没必要。
场景二:512M 内存的老爷机。 Docker 守护进程本身几十 MB,加上镜像分层占的磁盘,小机器每一 MB 都金贵。这种机器直接二进制部署更实在,或者干脆换台 1G 的——一年也就差几十块,时间比机器贵。小够一直说:别在 10 美元的机器上花 100 美元的时间。
场景三:你对 Linux 很熟。 Docker 最大的价值是"环境一致性"。如果你闭着眼都能配好 LNMP、写 systemd 服务,它给你省的时间就有限了。当然,迁移方便这个优点还在,看你重不重视。
Podman:不要守护进程的 Docker
最常被问到的替代品是 Podman,命令和 Docker 几乎一样:
# 把 docker 换成 podman,90% 的命令通用
podman run -d -p 8080:80 nginx:alpine
podman compose up -d
特点:
- 无守护进程:没有 dockerd 常驻,容器可以直接用 systemd 管理,开机自启就是写个 service 文件,系统原生。
- 默认无 root:安全模型更干净,呼应本月安全那篇的思路,rootless 是默认不是选配。
- 兼容 OCI 标准:镜像和 Docker 通用,Docker Hub 的镜像直接能用,生态红利吃得到。
缺点:生态比 Docker 小,遇到怪问题搜到的答案少;compose 兼容性偶尔有坑(podman compose 依赖插件,不是所有发行版都顺);一些依赖 docker.sock 的工具(如 Portainer)要额外配置。
安装也简单,Ubuntu/Debian 仓库里就有:
sudo apt install -y podman podman-compose
小够的看法:新手先学 Docker,资料多、出了问题好搜。Podman 可以作为"知道了有这么个东西"的储备,等 Docker 玩熟了再试。技多不压身,但别同时学两个,容易混——命令太像了,混起来排错会疯。
二进制直装:最轻,但最累
有些应用官方提供单文件二进制(比如 Caddy、很多 Go 写的工具),下载、chmod +x、写个 systemd 服务就跑:
# 以 Caddy 为例,官方源有包,直接装
sudo apt install -y caddy
资源占用最低,但升级、迁移全靠手,应用一多就乱。适合:单个 Go/Rust 写的轻量工具,且你明确知道"我就跑这一个"。systemd 服务文件自己写:
[Unit]
Description=My App
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
User=appuser
[Install]
WantedBy=multi-user.target
Restart=always 就是 systemd 版的"重启策略",和 Docker 的 restart 一个思路。
systemd-nspawn:系统级的轻量容器
还有个冷门的:systemd 自带的 nspawn,能跑完整的 Linux 系统容器,比 Docker 重、比虚拟机轻。适合"我想要个隔离的完整系统,但不想装虚拟化"的场景。个人用户用得少,知道有这个选项就行,遇到"我想隔离整个系统环境"的极端需求时再研究。
LXC 呢
有读者问过 LXC。LXC 是系统容器,跑起来像个完整的小系统,开销比 Docker 还小。但生态、镜像、文档都远不如 Docker,个人用户遇到问题基本靠自己啃。之前那篇 LXC 科普讲过:轻量是有代价的。小够不推荐新手碰,除非你明确知道自己要什么。
决策树
应用多吗?
├── 多 → Docker(编排、隔离、迁移都省心)
└── 少(1-2个)
├── 长期不变 → 系统包/二进制(简单直接)
├── 常折腾 → Docker(重建秒级,试错成本低)
└── 机器很小(512M) → 二进制,或加钱上 1G
再加一个维度:你要学的东西。如果你是学生、想进大厂做运维,Docker 是必修课,不用替代品,直接学。如果只是想把博客跑起来,怎么省事怎么来。
没有银弹,只有"够用"
- 应用多、常折腾、要迁移 → Docker
- 单应用、求稳、机器小 → 系统包或二进制
- 想尝鲜、看重安全模型 → 了解 Podman
- 完整系统隔离 → 了解一下 nspawn/LXC,但新手别碰
这个月 Docker 系列到这结束。记住小够的口头禅:工具没有高低,只有合不合适。下个月换话题,敬请期待。