Docker 在 Windows 和 Linux 上装法差在哪?从踩坑到跑通的一线记录
很多站长第一次接触 Docker,是在自己 Windows 笔记本上装了个 Docker Desktop,跑了个 hello-world 觉得挺顺。等到要把同一套配置搬到 Linux 服务器上,命令全变了,镜像拉不下来,数据卷权限报错,端口映射也连不上。问题不在 Docker 本身,在于两个平台从安装到运行走的根本是两条路。这篇把两条路各自的关键节点摊开讲,重点放在真正会让流程卡住的地方。
Windows 这边:先想清楚要不要用 WSL2 后端
Windows 上装 Docker,现在主流就两条:Docker Desktop 自带 WSL2 后端,或者手动在 WSL2 里装 Docker Engine。前者装完即用,代价是常驻内存通常要吃掉 2GB 以上,开发机只有 8GB 内存的话,再开个 IDE 就开始换页了。
我一般建议按机器配置分:16GB 以上直接上 Desktop,省心;8GB 或更低,用 WSL2 里手动装 Engine,内存占用能压到几百 MB。
- Desktop 路线:官网下载安装包,装完在设置里勾选「Use WSL 2 based engine」,重启即可
- Engine 路线:WSL2 里执行 curl -fsSL https://get.docker.com | sh,再把当前用户加进 docker 组
两条路都会遇到同一个坎:默认从 Docker Hub 拉镜像,国内网络经常卡在 pull 阶段。解决办法是改 daemon.json 加镜像加速地址,Desktop 在设置面板里改,Engine 直接编辑 /etc/docker/daemon.json。这点不处理,后面所有步骤都是空谈。
Linux 这边:安装只是开始,权限才是真门槛
Linux 上装 Docker 本身不复杂,Ubuntu 22.04 加官方源,两条 apt 命令就完事。真正的门槛在装完之后。
默认情况下普通用户执行 docker 命令会报 permission denied,因为 /var/run/docker.sock 属于 root。把用户加进 docker 组能解决,但要注意这个组等价于 root 权限——能挂载宿主目录进容器的人,基本能做任何事。生产服务器上这点要想清楚。
第二个坑是数据卷权限。容器里跑的应用如果以非 root 用户运行,挂载宿主目录时经常出现写入失败。常见做法是在 Dockerfile 里显式指定 UID/GID,或者启动时用 --user $(id -u):$(id -g) 对齐。这点在 Windows 上基本不会遇到,因为 WSL2 的文件系统映射逻辑不同,所以从 Windows 迁到 Linux 时最容易翻车。
第三是端口映射。Linux 上 -p 80:80 如果宿主 80 端口已经被 nginx 占用,容器直接起不来;Windows 上因为走的是虚拟网卡,冲突表现不太一样。上线前先用 ss -tlnp 查一遍端口占用,能省很多排查时间。
镜像和存储:决定你后面跑得顺不顺
镜像大小直接影响部署速度。同一个应用,用 alpine 基础镜像可能 50MB,用完整 ubuntu 镜像轻松超过 300MB。每次部署都要重新拉镜像的话,这个差距会累积成几分钟的等待。多阶段构建能把编译工具链留在构建阶段,最终镜像只保留运行时,这是最值得花时间优化的一步。
存储驱动方面,Linux 上默认 overlay2 就够了,除非你要跑大量小文件读写的场景。Windows 上的存储驱动选择少,Desktop 环境基本不用操心。数据持久化统一走 volume 或者 bind mount,别把数据放在容器可写层里,容器一删数据就没了。
如果后面要把容器放到线上跑,宿主机的磁盘 IO 和网络带宽就是硬约束。跑几个容器做测试,一台 4 核 8G 的机器足够;真上生产,尤其是带数据库的容器,磁盘类型比 CPU 核数更关键。我见过不少配置把预算全砸在 CPU 上,结果数据库容器卡在磁盘等待上。
跑通之后,下一步该往哪走
本地跑通只是起点。真正把 Docker 用起来,接下来要面对的是多容器编排、日志收集、镜像仓库这几件事。单机用 docker compose 能撑一阵子,超过三四个服务就该考虑更系统的方案了。
如果不想在本地机器上折腾资源,直接拿一台服务器当实验环境也行。香港自营物理服务器(100M)⑦ 这种配置(金牌6138*2 / 64G / 100M)跑十几个容器没什么压力,网络延迟对国内访问也友好。先用 香港自营物理服务器(100M)⑦ 把整套流程走一遍,比在本地反复装删要省时间。
结论很清楚:Windows 开发机内存 16GB 以上直接 Docker Desktop,低于这个数走 WSL2 手动装 Engine;Linux 服务器装完第一件事是把用户权限和端口占用查清楚,别等到部署时才排查。镜像能从 300MB 压到 50MB 就压,这一步省下的是每次部署的时间。