Docker在Windows和Linux上部署,坑点与配置取舍实战

2026-10-11 17:56 1012 次浏览

很多人第一次装Docker是在自己的开发机上,Windows和Linux各试一遍,结果两边报的错完全不一样。Windows上装完跑起来慢半拍,Linux上装完发现磁盘空间莫名其妙少了几十G。这两个系统的容器实现路径本来就不同,配置方式自然也不能照搬。下面按实际部署顺序把两边的差异拆开说,重点是那些装完就不想再动的地方。

Windows这边,默认走WSL2还是Hyper-V

Docker Desktop在Windows上有两种后端。WSL2是现在的默认选项,启动快、跟Windows文件系统互通方便;Hyper-V后端隔离更彻底,但内存占用明显更高。我一般建议直接用WSL2,除非你有明确的Windows容器需求。

WSL2的坑主要在资源分配。默认情况下它会吃掉宿主机一半内存,跑几个容器之后Windows本身就开始卡。解决办法是在用户目录下建一个 .wslconfig 文件,手动限制内存和CPU核心数。比如给WSL2分配8GB内存、4个核心,剩下的留给宿主机。这个文件改完要执行 wsl --shutdown 才会生效。

另一个常见问题是文件挂载性能。把代码放在Windows盘符下,再从WSL2里挂载进容器,读写速度会掉得厉害。项目文件建议直接放在WSL2的Linux文件系统里,比如 /home/用户名/project 这种路径,编译和热重载会顺畅很多。这点我没实测过所有场景,但多数前端项目体感差异明显。

Linux上装Docker,内核和存储驱动先对齐

Linux这边装Docker本身不复杂,麻烦的是装完之后的存储驱动选择。CentOS 7默认用overlay2,但内核版本低于3.10.0-514的话可能不生效,得先升级内核。Ubuntu 20.04以上基本开箱即用,不用额外折腾。

磁盘空间是另一个容易被忽略的点。Docker默认把镜像和容器数据放在 /var/lib/docker,如果你系统盘只分了20G,跑几个大镜像就满了。我一般会在部署前把数据目录迁到独立的数据盘,改法是在 /etc/docker/daemon.json 里指定 data-root 路径,然后重启Docker服务。

镜像加速配置两边都需要。国内拉取Docker Hub镜像经常超时,在daemon.json里加几个registry-mirrors能省不少等待时间。这个配置Windows端在Docker Desktop的设置界面里改,Linux端直接编辑daemon.json,改完都要重启服务。

容器资源限制,两边都不能省

不管哪个系统,跑容器时不限制资源都是隐患。一个内存泄漏的容器能把宿主机拖垮,Windows上表现为整个桌面卡死,Linux上则是OOM Killer开始杀进程。

启动容器时用 --memory 和 --cpus 限制上限,比如 docker run --memory=2g --cpus=1.5。这个限制不是建议值,是硬上限,超过就会被限制或终止。数据库类容器建议再配上 --memory-swap,避免频繁换页影响性能。

如果要在生产环境跑多个容器,建议直接用docker compose管理。compose文件里可以统一写资源限制、重启策略和环境变量,比手敲docker run命令可靠得多。重启策略用 restart: unless-stopped,机器重启后容器能自动拉起来。

部署环境选本机还是服务器

开发阶段用本机Docker没问题,但正式对外提供服务时,本机部署的稳定性、带宽和IP资源都不够用。需要固定公网IP、大带宽或者多IP站群的场景,用独立服务器跑Docker更合适。

香港机房的物理服务器延迟低,适合面向国内和亚太用户的业务。比如 香港大带宽物理服务器 IX,E5-2660*2 配 32G 内存和 250M 带宽,跑几个中等规模的容器集群够用。如果是多站点部署需要独立IP,马来西亚站群 I 提供多C段IP,E5-2683v4*2 加 64G 内存,月付 $259.00,适合把多个Docker实例分开跑在不同IP上。

收尾:按场景选路径

个人开发机用Windows加WSL2最省事,记得改.wslconfig限制资源。Linux服务器部署先把存储驱动和数据目录理清楚,再配镜像加速。生产环境别在本机硬扛,该上独立服务器就上,带宽和IP资源是本地机器给不了的。

容器数量少就用docker run加资源限制,超过三个服务就用compose统一管。这两步做完,Docker部署基本不会出大问题。