Windows 10 之 WSL 2

Windows Subsystem for Linux(WSL)无疑大大提升了Windows下程序开发的体验。

WSL 2向开发者提供的完整的系统调用兼容,使得许多无法在WSL 1中安装的应用,如Docker在WSL 2下成为可能。

WSL 2要求Windows 10 build 18917 或更高版本,否则无法使用。

查看Win10构建号

win + R
输入:
winver

弹窗如下,显示当前的构建号:

如果build低于18917,就需要升级Win 10。

更新Win10到18917+

参考:

https://www.jb51.net/os/win10/678060.html

WSL 1升级WSL2

由于笔者的Win10已经安装了WSL 1,因此需要从WSL 1升级到WSL 2。

首先启用“虚拟机平台”可选组件,在管理员身份打开的PowerShell中输入:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

执行成功后立即重启生效。

接着使用命令行设置要由 WSL 2 支持的发行版,在 PowerShell 中运行:

wsl --set-version <Distro> 2

并确保将 <Distro> 替换为发行版的实际名称。 (可以使用以下命令查看:wsl -l)。

由于笔者使用的是Ubuntu发行版,因此在powershell中执行:

wsl --set-default-version 2
wsl --set-version Ubuntu 2

其中wsl --set-default-version 2 将今后所有安装WSL发行版初始化为WSL 2发行版。等待上述转换完成,这个过程可能会花费一些时间。

接着就可以在powershell中执行:

wsl -l -v

查看使用的WSL的版本。如:

PS C:\WINDOWS\system32> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

在Win10中安装SSH Client

参考:

https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse

Powershell启动WSL

参考:

https://devblogs.microsoft.com/commandline/a-guide-to-invoking-wsl/

即只要在PowerShell中输入:

wsl

即可启动WSL。

通过PowerShell命令:

wsl --shutdown

也可以关闭当前运行的所有WSL实例。

除了PowerShell这种方式外,Windows还提供了快捷方式,我们的WSL通常是从Win 10的应用商店中安装的,找到Win 10本地安装WSL应用后的快捷方式,也可启动同时弹出对应WSL的终端。

WSL中安装SSH服务并启动

这个过程相当于在Linux中安装sshd,相关资料非常多,这里不赘述。

后续可以在Win 10中通过ssh客户端访问WSL,好处是可以使用自己喜欢的终端工具。

VSCode安装Remote Development套件

VSCode集成了对WSL的支持,便于在VSCode开发时操作WSL。

参考:

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

VSCode中配置SSH Config连接配置文件

示例:

Host WSL-UBUNTU
    HostName 172.31.165.60
    User darren

其中172.31.165.60是在WSL中执行网络查看命令如ifconfig查询到的。

VSCode连接成功WSL后,VSCode后续打开的所有Terminal都将是WSL上的终端,而不是Win10本地的终端。

VSCode打开WSL目录

在VSCode连接到WSL中之后,打开VSCode中的终端,此时终端连接的是WSL,在终端中cd到目标目录,输入:

code .

即可在VSCode中打开WSL内系统的目录。

Win 10 访问 WSL内部文件系统

如果我们想在Win 10和WSL之间进行文件的传输,Windows提供了非常方便的支持,上述通过VSCode是一种方式。

此外,在WSL中的用户home目录,输入:

explorer.exe .

Win 10就会弹出一个资源浏览器,支持以Windows窗口的形式浏览WSL中的文件系统,非常方便。

此外,PowerShell提供了一种访问WSL的命令行形式:

cd \\wsl$\{distro_name}\

例如,我的WSL是Ubuntu发行版,就在PowerShell下输入:

cd \\wsl$\Ubuntu

即可在PowerShell中浏览WSL的文件系统了。

WSL 2的神坑

原本当我在WSL 2 Ubuntu中安装了Docker-CE,这一在WSL 1中不敢想的事情时,我非常开心,觉得Windows在开发方面终于可以越来越接近MacBook,同时可以和Windows的虚拟机说拜拜了。

但是后续的使用中发现了 WSL 2存在的一个神坑,即每次重启Windows系统,WSL实例的IP地址就会动态变动,哈哈哈哈哈哈哈,每次查WSL实例的IP也是醉了。

当然网上也有一些开源的解决方案如每次启动时动态查询其IP,然后修改Windows的hosts文件,应用对WSL的访问不要使用IP而是用hosts文件中的主机名等等。

然而我还是觉得为WSL分配固定的IP应该是开发者的刚需,估计后续的Win 10版本也应该会修复这个问题。

总体说来,瑕不掩瑜,笔者已经在Windows 10 WSL 2愉快的玩Docker了,随着Win 10的不断成熟,我相信借助WSL应该会成为今后Windows上集成Docker的主流方式。

posted on   CokeCode  阅读(10466)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示