Windows 10/11安装WSL、Ubuntu、Docker Desktop
WSLWindows Subsystem for Linux是微软开发的轻量级虚拟机环境允许用户在 Windows上运行完整的Linux内核和用户空间适用于Windows的Linux子系统。能实现运行原生的Linux命令和程序如aptgccmake等拥有独立的文件系统支持网络、进程等Linux功能。另有一说可在WSL上模拟出有限的Linux环境而不是Linux发行版。安装安装WSL需要有一些前置操作。前置操作打开控制面板找到【程序和功能】点击左侧的【启用或关闭Windows功能】勾选【适用于Linux的Windows子系统】需要同时勾选【虚拟机平台】下面截图未勾选需要重启Windows电脑生效。Docker Desktop安装WSL有两种方式通过Docker Desktop实际上还是通过下面的命令行通过命令行执行任意wsl命令行可触发WSL安装。下载并安装Docker Desktop时会出现如下提示或者正常情况下用管理员身份启动Docker Desktop时会触发WSL的安装或升级也可手动输入命令行安装WSL系统需要有较好的网络环境代理否则下载速度会非常慢。安装成功后输入命令wsl -v查看WSL版本号输入命令wsl --list或wsl --list --verbose查看子系统列表注意到在NAME前面有个*VERSION为2。下面会继续论述。WSL和Docker DesktopDocker Desktop是Docker官方为Windows和macOS提供的一个桌面应用程序集成Docker Engine引擎Docker CLI命令行工具Kubernetes可选资源管理器集成与WSL2的深度集成新版Docker Desktopv2.3在Windows上强烈依赖WSL2官方推荐并默认使用WSL2作为后端运行环境。功能使用WSL2的优势完整的Linux内核支持Docker 需要Linux特性如cgroups、namespaces更好的性能相比Hyper-V虚拟机更轻量、更快文件系统互通可无缝访问Windows文件系统与Ubuntu等发行版共存可在多个终端中使用Docker CLI脱离WSL2能否在Windows上安装Docker Desktop从2020年以后发布的Docker Desktop版本来看已经无法完全绕过WSL2来运行完整功能的Docker Desktop。旧版本如Windows 10企业版/专业版可使用Hyper-V Windows Containers来运行Docker Desktop但不支持Linux容器除非切换容器类型不适合开发者日常使用很多功能受限如挂载本地目录、构建镜像等参考Windows10系统Docker for Windows与VMWare关于Hyper-V问题。Ubuntu上面通过Docker Desktop方式安装WSL并启动一个docker-desktopLinux子系统。相信很多接触Linux的同学都是从Ubuntu开始的。WSL能不能安装Ubuntu系统呢当然可以输入命令wsl --install Ubuntu安装Ubuntu系统报错原因是因为开了代理就比如此时无法打开Microsoft Store一样。关掉代理反复重试还是失败的解决方法手动下载离线安装包地址得到Ubuntu2204-221101.AppxBundle文件。安装方法双击该文件系统会自动调用应用安装程序完成安装通过PowerShell命令Add-AppxPackage -Path C:\Users\johnny\Downloads\Ubuntu2204-221101.AppxBundle本文使用第二种方式上面的命令执行成功后在开始菜单中找到Ubuntu并点击忽略第二个弹窗里的报错出现如下提示首次运行会提示输入用户名和密码完成初始化配置。用户名密码必填直接回车无效正常情况下可通过命令行安装安装成功输入命令wsl --list --verbose在CMD下新增窗口的效果WSL1和WSL2Windows1903版本以及以后还支持WSL2。WSL2基于Windows Hyper-V虚拟化技术启用更全面的虚拟化功能。两者比较WSL2和WSL1两者不兼容。WSL2与大多数其他虚拟机产品在开启虚拟化加速技术诸如Intel TV-x/AMD-V时是冲突的。特性WSL1WSL2内核支持模拟Linux系统调用翻译完整的Linux内核基于轻量级虚拟机文件系统互通支持Windows与Linux文件系统互相访问访问Windows文件慢Linux文件快网络与Windows共享IP地址有自己的独立IP地址GUI应用支持默认不支持需额外配置可通过设置支持GUI应用启动速度快稍慢需要启动虚拟机硬件支持不支持USB、GPU直接访问更好地支持GPU、USB需配合驱动优点文件系统可以无缝互操作性能高启动快支持完整的Linux内核功能如dockerfirewalld更接近真实Linux环境支持GUI、网络服务等高级功能缺点不支持Linux内核特性如systemdiptablesmount等不适合运行需要完整Linux内核的服务或容器如Docker与Windows文件系统交互较慢有自己的IP地址需注意防火墙设置启动稍慢适合场景开发工具、脚本运行等需要完整Linux环境如Docker、内核功能WSL1模拟方式运行Linux用户态程序不使用真正的Linux内核将Linux系统调用翻译成Windows能理解的NT API。WSL2使用Hyper-V技术运行一个完整的Linux内核轻量级虚拟机对用户透明所有Linux系统调用都直接运行在Linux内核中。切换WSL版本可为每个发行版单独设置使用的WSL版本wsl --set-versionDistributionName2wsl --set-versionDistributionName1wsl --set-version Ubuntu2wsl --set-version Debian1比如遇到的问题也就是上面看到的设置为WSL1之后Docker Desktop自动停止因此对于Docker Desktop不能使用WSL 1版本。切换回去还是Stopped状态直接执行wsl命令即可启动Docker Desktop启动默认发行版使用WSL安装或升级成功后的效果有很多概要性介绍知识。跨文件系统工作包括从Linux访问Windows文件使用Windows文件资源管理器访问Linux文件从WSL启动Windows文件和程序TODOGUI应用可通过本机Windows交互操作例如Alt-Tab、开始菜单启动、任务栏固定以及剪切和粘贴支持使用基于图形的Linux应用程序。可通过sudo apt install TheApp Narme在Ubuntu中尝试安装的部分应用列表gedit基本文本编辑器audacity录制和编辑音频文件blender制作3D动画和可视化效果gimp编辑照片nautilusLinux文件资源管理器vlc视频播放器GPU加速在WSL中运行的Linux二进制文件可自动使用Windows中的GPL来加快性能。网络集成可以跨Windows和Linux操作系统轻松访问网络应用。从Windows访问Linux网络应用如果要在Linux分发版中生成网络应用则可使用localhost从Windows应用如Chrome浏览器访问它。镜像模式网络WSL还包括一种称为镜像模式的新网络模式添加IPv6支持等高级功能并且能够访问局域网中的网络应用程序。发行版管理WSL是试用不同Linux发行版的好方法。列出可安装的WSL发行版命令wsl.exe -l -o安装命名的WSL发行版命令wsl.exe --install DistroName列出可用的WSL发行版命令wsl.exe -IDocker Desktop集成上面多次提及。VS Code集成可直接从VSCode使用WSL作为全时开发环境。安装VSCode后可从Windows终端安装远程WSL扩展code -install-extension_ms-vscode-remote.remote-wsl实战读写文件分两种场景在WSL中访问本地Windows在本地Windows下访问WSL系统。在WSL2中Windows的文件系统会自动挂载到/mnt目录下比如Windows下的C盘对应路径为/mnt/c注意是小写注意是小写。在Windows中访问Ubuntu文件打开文件资源管理器输入\\wsl$回车双击操作和在Windows下一样设置永久挂载或软链接如果你经常需要访问某个 Windows 文件夹可以创建一个符号链接软链接到你的 home 目录ln -s /mnt/c/Users/YourName/Documents ~/win_docs之后就可以用~/win_docs来快速访问 Windows 中的文档目录。在 Docker 中挂载 Windows 本地目录与 WSL2 配合当你使用 Docker Desktop 时它会自动处理 WSL2 和 Windows 之间的文件系统桥接。比如你在 Docker 命令中这样写docker run -v /mnt/c/Users/YourName/mycode:/app myimage等价于把 Windows 的 C:\Users\YourName\mycode 挂载到了容器的 /app 目录。注意事项不要在/mnt路径下运行git、npm、或编译工具如make因为性能差且可能导致数据损坏避免在Windows资源管理器中直接编辑WSL2的Linux文件系统中的文件如/home/xxx这可能导致权限问题或文件损坏推荐将项目放在Linux文件系统中如/home/me仅通过/mnt挂载做临时拷贝或共享。告警wsl: 检测到 localhost 代理配置但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。Docker根据上面的提示让我去Docker Desktop设置下但是找了一圈还是没有找到配置入口。还是得看文档执行命令wsl --set-default Ubuntu再次在WSL里的Ubuntu系统执行docker可正常使用。参考官方文档GPT