1. 为什么要在Windows下的Ubuntu中安装Docker在Windows系统中通过WSL运行Ubuntu并安装Docker这种组合方案正在成为开发者的主流选择。我最初也是被这个方案吸引因为它完美解决了Windows原生开发环境的诸多痛点。传统Windows开发最大的困扰就是环境差异。你本地调试通过的代码部署到Linux服务器上就可能出现各种兼容性问题。而直接在Windows上安装Docker Desktop又存在性能损耗和资源占用过高的问题。WSL2的出现改变了这一局面——它提供了接近原生Linux的性能同时又能与Windows系统无缝集成。我选择在WSL的Ubuntu中安装Docker而非直接使用Docker Desktop主要基于以下考虑资源占用更低WSL2的轻量化架构比完整虚拟机更节省内存开发体验更接近生产环境Ubuntu中的Docker环境与服务器完全一致性能更优文件系统操作速度比Windows挂载卷快3-5倍调试更方便可以直接使用Linux原生工具链2. 环境准备与系统检查2.1 Windows系统要求确认在开始之前必须确保你的Windows系统满足以下最低要求Windows 10 版本 2004 或更高内部版本 19041 或更高Windows 11 所有版本均可64位处理器建议4核以上4GB系统内存建议8GB以上BIOS中启用虚拟化支持VT-x/AMD-V重要提示如果你的系统是Windows家庭版需要先升级到专业版或企业版才能使用Hyper-V功能。我遇到过不少开发者卡在这一步建议提前确认系统版本。2.2 WSL2安装与Ubuntu选择安装过程分为几个关键步骤启用Windows功能dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart下载并安装WSL2内核更新包微软官网提供设置WSL2为默认版本wsl --set-default-version 2选择Ubuntu版本Ubuntu 20.04 LTS更稳定社区支持完善Ubuntu 22.04 LTS新特性更多长期支持版本我个人的选择建议生产环境Ubuntu 20.04 LTS稳定性优先开发环境Ubuntu 22.04 LTS尝鲜新特性3. Docker安装全流程解析3.1 基础环境配置在Ubuntu中执行以下命令更新系统sudo apt update sudo apt upgrade -y sudo apt install -y apt-transport-https ca-certificates curl software-properties-common这里有几个容易踩坑的地方必须使用sudo提权否则会报权限错误国内用户建议先配置阿里云或清华的apt镜像源加速下载如果遇到Unable to locate package错误可能是源未更新再次执行apt update3.2 Docker官方GPG密钥添加安全起见我们需要添加Docker的官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg验证密钥是否添加成功gpg --show-keys /usr/share/keyrings/docker-archive-keyring.gpg应该能看到Docker的指纹信息9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD883.3 配置稳定版仓库根据你的Ubuntu版本选择正确的仓库配置echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null这个命令做了三件事自动检测系统架构amd64/arm64使用之前添加的GPG密钥验证添加对应Ubuntu版本的Docker仓库3.4 Docker引擎安装执行安装命令sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin安装完成后验证版本docker --version containerd --version正常应该输出类似Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.1 containerd containerd.io 1.6.21-0ubuntu1~22.04.14. 权限配置与验证测试4.1 非root用户权限配置默认情况下只有root用户和docker组的用户才能运行Docker命令。为了避免每次都要加sudo我们需要将当前用户加入docker组sudo usermod -aG docker $USER newgrp docker这个配置需要重新登录才能生效。验证是否配置成功docker run hello-world如果看到Hello from Docker!的消息说明安装成功。4.2 解决常见权限问题有时候即使加入了docker组仍然会遇到权限问题。这是Linux的组权限缓存机制导致的。解决方法彻底退出当前shell会话重新打开终端验证组信息groups应该能看到docker组在输出列表中如果问题依旧可以尝试重启WSL实例wsl --shutdown5. 高级配置与优化5.1 镜像加速配置国内用户建议配置镜像加速器提升拉取速度。创建或修改配置文件sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 } EOF应用配置并重启服务sudo systemctl daemon-reload sudo systemctl restart docker5.2 WSL2内存限制调整默认情况下WSL2会占用最多50%的物理内存对于Docker开发可能不够。在Windows用户目录下创建.wslconfig文件[wsl2] memory8GB swap4GB localhostForwardingtrue然后重启WSLwsl --shutdown6. 典型问题排查指南6.1 虚拟化支持未启用错误如果遇到Virtualization support not detected错误需要重启进入BIOS各品牌按键不同通常是F2/DEL找到Intel VT-x或AMD-V选项并启用在Windows中确认虚拟化已启用systeminfo | find Hyper-V Requirements应该看到虚拟化已在固件中启用是6.2 Docker服务启动失败检查服务状态sudo systemctl status docker常见错误及解决方法iptables/nftables冲突sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacycgroup挂载问题sudo mkdir /sys/fs/cgroup/systemd sudo mount -t cgroup -o none,namesystemd cgroup /sys/fs/cgroup/systemd6.3 网络连接问题WSL2的NAT网络可能导致容器无法访问外部网络。解决方法在Windows防火墙中允许Docker通过创建自定义DNS配置sudo tee /etc/wsl.conf EOF [network] generateResolvConf false EOF然后编辑resolv.confsudo rm /etc/resolv.conf sudo tee /etc/resolv.conf EOF nameserver 8.8.8.8 nameserver 114.114.114.114 EOF7. 开发环境最佳实践7.1 项目目录结构建议为了获得最佳性能建议将项目文件存放在WSL文件系统中如/home/username/projects而不是Windows挂载目录如/mnt/c/。性能对比文件位置操作速度兼容性推荐场景WSL内部★★★★★★★★★★日常开发/mnt/c/★★☆☆☆★★★☆☆临时文件7.2 常用开发镜像推荐基础开发环境docker run -it --rm -v $(pwd):/workspace -w /workspace ubuntu:22.04Node.js开发docker run -it --rm -v $(pwd):/app -p 3000:3000 node:18-alpinePython开发docker run -it --rm -v $(pwd):/code -p 8000:8000 python:3.10-slim7.3 持久化数据管理对于数据库等需要持久化的服务建议使用命名卷docker volume create mysql_data docker run -d -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORDsecret mysql:8.0查看卷使用情况docker system df -v8. 性能优化技巧8.1 文件系统性能调优WSL2与Windows文件系统交互存在性能瓶颈。实测数据操作WSL内部/mnt/c/差异文件遍历1.2s8.7s7.25x编译项目23s1m42s4.43x优化建议将git仓库克隆到WSL内部文件系统使用.dockerignore减少上下文传输对于大型项目考虑使用docker volume挂载8.2 资源限制配置防止Docker占用过多资源创建或修改~/.wslconfig[wsl2] memory6GB processors4 localhostForwardingtrue验证配置生效cat /proc/meminfo | grep MemTotal9. 日常维护与升级9.1 定期清理无用资源使用prune命令清理docker system prune -f docker volume prune -f docker image prune -a --filter until24h可以设置cron任务自动清理(crontab -l 2/dev/null; echo 0 3 * * * docker system prune -f) | crontab -9.2 安全更新策略每周检查更新sudo apt update apt list --upgradable仅更新Docker相关包sudo apt upgrade docker-ce docker-ce-cli containerd.io验证更新后版本docker version10. 替代方案对比虽然本文介绍的是官方Docker CE安装方式但实际还有其他选择方案优点缺点适用场景Docker Desktop图形界面友好资源占用高Windows原生开发Podman无需root权限兼容性问题安全敏感环境ColimamacOS优化社区支持少跨平台开发我个人仍然推荐WSL2Docker的组合它在资源占用、开发体验和性能之间取得了最佳平衡。特别是在持续集成场景下这种环境配置可以完美匹配大多数CI服务器的Linux环境。