Docker在Windows和Linux上怎么装才不出岔子?从WSL2到镜像加速的实操记录
很多人第一次在Windows上装Docker,卡住的地方往往不是Docker本身,而是WSL2的内核组件。装到一半弹出「WSL 2 installation is incomplete」,点确认之后又跳回下载页,来回几次就烦了。Linux那边看着简单,一条apt命令下去,结果docker ps要加sudo,或者拉镜像慢到以为断网。这些坑我都踩过,下面按系统分开讲,把每一步为什么这么做说清楚,而不是只贴命令。
Windows:Docker Desktop还是直接跑在WSL2里
先做个取舍。Docker Desktop图形界面友好,开机自启、端口映射、卷挂载都点几下就好,代价是它常驻内存大概占1.5G到2G,且商用需要授权。如果你只是本地开发、跑几个容器,Docker Desktop省事。
另一种做法是干脆在WSL2的Ubuntu里装原生Docker引擎,不装Desktop。内存占用能降到几百兆,命令和Linux服务器完全一致,缺点是端口对外访问要手动转发,Windows侧的工具链也得自己接。
- 选Docker Desktop:需要图形界面、经常切换容器状态、不想碰命令行网络配置
- 选WSL2原生引擎:机器内存紧张(比如16G以下)、想让本地环境和线上服务器保持一致
装Desktop之前先把WSL2搞定:以管理员开PowerShell,执行 wsl --install,重启后设置一个Linux用户名。如果提示内核版本旧,去微软官网下WSL2内核更新包,装完再 wsl --set-default-version 2。这一步不做,后面Docker启动会一直转圈。
装完Desktop后建议把镜像存到非系统盘。默认镜像位置在 C:\Users\你的用户名\AppData\Local\Docker,C盘小的机器跑几个大镜像就红了。在设置里改Disk image location到D盘即可,改完它会迁移已有镜像,等几分钟。
Linux:装完先解决sudo和镜像源这两件事
Linux上装Docker本身很快,Ubuntu下用官方脚本或apt仓库都行。真正影响日常使用的是两个配置,一个是免sudo,一个是镜像加速。
免sudo的做法是把当前用户加进docker组:sudo usermod -aG docker $USER,然后重新登录。注意这一步等于给了这个用户root等价权限,生产机器上要不要开,得看你的安全策略。我一般只在个人开发机上开,线上服务器保持sudo。
镜像加速解决的是拉取速度。改 /etc/docker/daemon.json,写入registry-mirrors字段,然后 systemctl daemon-reload && systemctl restart docker。国内多数情况下不加这一项,拉一个几百兆的镜像要等十几分钟。改完可以用 docker info 看Registry Mirrors是否生效。
还有一处容易被忽略:数据盘。Docker默认把镜像和容器数据放在 /var/lib/docker,系统盘只有40G的话,跑不了多久就满。可以在daemon.json里用data-root指到挂载的大盘,改之前记得先停docker服务并迁移已有数据,否则容器会找不到层。
两个系统都会遇到的问题:端口、网络和开机自启
端口冲突是最常见的报错。容器映射的宿主端口如果被占,docker run直接失败,报address already in use。排查用 ss -tlnp 看谁占着,Windows下用 netstat -ano 加任务管理器对PID。
网络方面,WSL2里的容器默认走NAT,Windows外部想访问得靠端口转发或者用 localhost 直连(新版WSL2支持localhost转发)。Linux服务器上如果开了防火墙,记得放行映射的端口,ufw和firewalld的命令不一样,别搞混。
开机自启:Linux用 systemctl enable docker 即可,容器本身还要在run时加 --restart unless-stopped,否则重启机器后容器不会自己起来。这一点很多人装完就忘了,直到某次重启后发现服务全没了才想起来。
如果本地调通之后要放到线上跑,国内访问延迟敏感的可以看香港方向的机器,比如香港(国际)大带宽vps云服务器,8H8G配20M带宽,月付13.77美元,跑几个中小型容器够用;要更大内存和独享资源的,美国洛杉矶方向的裸机方案也可以考虑,E5-2683v4双路配64G内存,月付149美元,适合镜像多、构建任务重的场景。
收尾:按场景选一条路
个人开发、Windows主力机,直接Docker Desktop加WSL2,装完把镜像位置挪出C盘,十分钟能开工。内存16G以下的机器,或者想让本地和线上环境完全对齐,就在WSL2里装原生引擎,省下那1.5G内存给容器用。Linux服务器一律原生引擎,装完先配免sudo和镜像源,再把data-root指到大盘,这三步做完基本不会再出问题。至于线上机器买哪档,先按容器数量和镜像大小估内存,别一上来就堆配置。