为什么想换掉它

三个现实理由:一定规模以上的商业使用需要付费授权;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 重启比反复改防火墙有效。