为什么想换掉它
三个现实理由:一定规模以上的商业使用需要付费授权;Desktop 常驻进程加 WSL2 后端内存占用不小;GUI 把 dockerd、containerd、Kubernetes 全打包,本地跑几个容器做开发根本用不上。Linux 上压根没这个问题,直接装 Docker Engine 就是最干净的官方方案。Windows 和 macOS 上才需要找替代。
四条路线对比
| 方案 | 形态 | rootless | 授权 | 适合 |
|---|---|---|---|---|
| WSL2 + 原生 dockerd | 无 GUI | 否 | 免费 | Windows 想要原生 Docker |
| Podman | 无守护进程 | 是 | 免费 | 要 rootless、兼容 docker CLI |
| Rancher Desktop | 带 GUI | 可选 | 免费 | 要本地 k8s 与图形界面 |
| OrbStack / colima | 轻量 VM | 可选 | 部分付费 | macOS 上省电省内存 |
WSL2 里直接跑 dockerd
wsl --install -d Ubuntu-22.04
wsl -d Ubuntu-22.04
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
sudo mkdir -p /etc/docker
{
"registry-mirrors": ["https://docker.m.daocloud.io"],
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
上面这段存成 /etc/docker/daemon.json,日志上限一定配,否则某个容器疯狂输出能把磁盘写满。下面这段是 Windows 用户目录的 .wslconfig,用来限制 WSL2 的资源:
[boot]
systemd=true
[wsl2]
memory=6GB
processors=4
swap=2GB
最关键的坑是 WSL2 默认不起 systemd,装完 dockerd 起不来、systemctl 报 "System has not been booted with systemd"。加 [boot] systemd=true 后必须执行 wsl --shutdown 再重进分发版才生效。顺手限制内存,不然 WSL2 会把宿主机内存吃到卡死。
Podman 与迁移注意点
winget install --id RedHat.Podman -e
podman machine init
podman machine start
alias docker=podman
podman run -d --name redis -p 6379:6379 redis:7-alpine
Podman 无守护进程、默认 rootless,podman compose 也能跑大部分 docker-compose.yml。差异集中在三处:rootless 下映射 1024 以下端口要调 net.ipv4.ip_unprivileged_port_start;卷挂载在 SELinux 环境要加 :Z 重打标签;依赖 /var/run/docker.sock 的工具要改指向 podman.sock 或开兼容 socket。
其它高频坑:把项目放在 /mnt/c 下,跨文件系统 I/O 慢到无法忍受,代码一定放 WSL 自己的 ext4 目录;镜像加速源经常失效,别把某个公益 mirror 写死进团队脚本;Docker Desktop 卸载后残留的 WSL 分发版要用 wsl --unregister 清掉,否则一直占着磁盘;Windows 端口转发偶尔失效,wsl --shutdown 重启比反复改防火墙有效。