WSL 2 中使用 Docker 容器的完整指南
容器技术概述
容器技术是现代软件开发中不可或缺的一部分,它通过轻量级的虚拟化方式,将应用程序及其依赖项打包在一起,确保在不同环境中运行的一致性。与传统虚拟机相比,容器共享主机操作系统内核,因此更加轻量高效。
Docker 是目前最流行的容器平台,而 Windows Subsystem for Linux (WSL) 2 则提供了在 Windows 上运行完整 Linux 内核的能力。将两者结合使用,开发者可以在 Windows 系统上获得接近原生 Linux 的开发体验。
环境准备
在开始使用 Docker 和 WSL 2 之前,需要确保系统满足以下要求:
-
操作系统版本:
- Windows 11 21H2 或更高版本
- Windows 10 22H2 或更高版本(推荐)
-
硬件要求:
- 64位处理器,支持二级地址转换(SLAT)
- 至少4GB内存
- BIOS中启用硬件虚拟化
-
软件要求:
- 已安装 WSL 2(版本1.1.3.0或更高)
- 为 Linux 发行版设置了用户名和密码
Docker Desktop 安装与配置
- 下载并安装 Docker Desktop for Windows
- 启动 Docker Desktop 后,通过系统托盘图标进入设置
- 在"General"设置中确保勾选"Use the WSL 2 based engine"
- 在"Resources" > "WSL Integration"中选择要启用 Docker 集成的 WSL 2 发行版
验证安装是否成功:
docker --version
docker run hello-world
常用 Docker 命令
- 查看 Docker CLI 可用命令:
docker - 查看特定命令帮助:
docker <COMMAND> --help - 列出本地镜像:
docker image ls --all - 列出容器:
docker container ls --all或docker ps -a - 查看 Docker 系统信息:
docker info
使用 VS Code 进行容器开发
为了获得最佳开发体验,建议安装以下 VS Code 扩展:
- WSL 扩展:允许在 WSL 中直接打开项目
- Dev Containers 扩展:支持在容器内开发
- Docker 扩展:提供容器管理功能
容器开发流程
- 将项目代码存储在 WSL 文件系统中(如
\\wsl$\Ubuntu-20.04\home\user\project\) - 在 WSL 终端中导航到项目目录并执行
code .打开 VS Code - 通过命令面板(Ctrl+Shift+P)执行"Dev Containers: Reopen in Container"
- 选择适合项目类型的容器配置(如 Python 3 对于 Django 项目)
- VS Code 会自动构建镜像并启动容器
- 使用 VS Code 的调试功能运行和测试应用程序
性能优化建议
- 始终将项目文件存储在 WSL 文件系统中,避免跨文件系统访问带来的性能损失
- 对于大型项目,考虑调整 Docker 资源分配(内存、CPU)
- 定期清理不再使用的镜像和容器以释放磁盘空间
常见问题解决
-
WSL docker context 已弃用:
- 检查现有上下文:
docker context ls - 移除弃用的 wsl 上下文:
docker context rm wsl
- 检查现有上下文:
-
找不到 Docker 镜像存储位置:
- Docker 在 WSL 中创建了两个数据存储目录:
\\wsl$\docker-desktop\\wsl$\docker-desktop-data
- 可以通过 WSL 发行版中的
explorer.exe .命令在文件资源管理器中查看
- Docker 在 WSL 中创建了两个数据存储目录:
-
容器启动失败:
- 检查 Docker 日志获取详细错误信息
- 确保 WSL 2 内核已正确安装和配置
- 验证系统资源(内存、CPU)是否充足
进阶使用技巧
-
多容器开发:
- 使用 docker-compose 管理多个关联容器
- 为不同服务(如数据库、缓存等)创建独立容器
-
自定义镜像构建:
- 通过 Dockerfile 定制开发环境
- 利用多阶段构建优化生产镜像大小
-
持久化数据管理:
- 使用 Docker 卷(volumes)持久化重要数据
- 避免在容器内存储关键数据
通过结合 WSL 2 和 Docker,开发者可以在 Windows 平台上获得强大的 Linux 开发环境,同时享受容器技术带来的便利性和一致性。这种组合特别适合需要跨平台开发的团队,能够显著提高开发效率和部署可靠性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



