WSL2: Making Windows 10 the perfect dev machine!

2025-06-04

WSL2:让 Windows 10 成为完美的开发机器!

免责声明:我在微软工作。你可能认为这让我对当前话题有些偏见。然而,我曾经是一位 MacOS / MacBook 的狂热用户——无论是在私人场合还是在工作中。我作为一名所谓的“云解决方案架构师”,从事开源/云原生应用开发领域——即涉及容器技术、Kubernetes 等的一切。这意味着几乎所有你需要使用的工具都是基于 Unix 的——或者至少,只有在 Unix 平台上才能完美运行。这就是为什么我很早就转向了苹果生态系统,因为它让你的(开发)生活变得轻松很多——尽管你偶尔会在工作中听到一些不太严肃的评论 :)

嗯,事情已经发生了变化……

介绍

在本文中,我想描述我当前的工具/环境在 Windows 10 机器上的设置情况,以及如何在“云原生”领域工作时以最佳方式(至少对我来说)设置最新版本的 Windows Linux 子系统 2(WSL2)。

长话短说...让我们开始吧!

基础知识

适用于 Linux 2 的 Windows 子系统 (WSL2)

整个故事始于 WSL2 的安装,它现在可与当前版本的 Windows(Windows 10,版本 2004,内部版本 19041 或更高版本)一起使用。Linux 子系统已经存在了很长一段时间,但它从未真正可用——至少对于版本 1 来说是这样(在性能、兼容性等方面)。

最重要的是,WSL2 让您能够在 Windows 上运行 ELF64 Linux 二进制文件——具有 100% 的系统调用兼容性和“接近原生”的性能!Linux 内核(针对 WSL2 进行了大小和性能优化)由微软基于“kernel.org”上提供的源代码,从最新的稳定分支构建而成。内核的更新通过 Windows 更新提供。

我不会详细介绍安装过程,因为您可以按照本教程轻松获取 WSL2:https://docs.microsoft.com/en-us/windows/wsl/install-win10

归结为:

  • 安装 Linux 子系统
  • 启用“虚拟机平台”
  • 将 WSL2 设置为默认版本

下一步是安装您选择的发行版……

安装 Ubuntu 20.04

我决定使用 Ubuntu 20.04 LTS,因为我已经很了解这个发行版,并且已经将它用于私人目的一段时间了——当然还有其他的:Debian、openSUSE、Kali Linux 等。无论你选择哪一个,安装本身都非常简单:你所要做的就是打开 Windows 应用商店应用,找到所需的发行版,然后单击“安装”(或者只需单击此 Ubuntu 链接:https://www.microsoft.com/store/apps/9n6svws3rx71)。

Windows 商店 Ubuntu 20.04 LTS

Ubuntu 安装

安装完成后,您需要检查是否使用了 Linux 子系统的“版本 2”(我们将“版本 2”设置为默认值,但以防万一……)。因此,打开Powershell提示符并执行以下命令:

C:\> wsl --list --verbose

  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2
  Ubuntu-18.04           Stopped         2
Enter fullscreen mode Exit fullscreen mode

如果您看到 Ubuntu-20.04 的“版本 1”,请运行...

C:\> wsl --set-version Ubuntu-20.04 2
Enter fullscreen mode Exit fullscreen mode

这将转换发行版以便能够在 WSL2 模式下运行(给自己倒杯咖啡,转换需要一些时间;))。

Windows 终端

接下来,您需要一个现代化、功能丰富且轻量级的终端。幸运的是,微软也提供了这个终端:开源 Windows 终端。它包含 Windows 命令行社区最常请求的许多功能,包括对选项卡、富文本、全球化、可配置性、主题和样式等的支持。

安装也可以通过 Windows 应用商店完成:https://www.microsoft.com/store/productId/9N0DX20HK701

安装到你的机器上后,我们可以调整终端的设置,将 Ubuntu 20.04 用作默认终端。为此,打开 Windows 终端并按“Ctrl+,”(这会在你的默认文本编辑器中打开 settings.json 文件)。

将 Ubuntu 20.04 配置文件的guid添加到“defaultProfile”属性:

默认配置文件

最后但同样重要的一点是,我们将升级所有现有软件包以使其保持最新版本。

$ sudo apt upgrade
Enter fullscreen mode Exit fullscreen mode

好了,“基础”已经到位了……我们在 Windows 中拥有了一个运行 Ubuntu Linux 的终端。接下来,让我们赋予它超能力!

设置/调整shell

目前正在安装的软件是我日常工作所需软件的摘录。当然,选择的内容可能与你实际需要的不同(不过我认为这涵盖了“云原生”领域人士会安装的很多软件)。尽管如此,我还是有必要在这里列出几乎所有的内容,因为如果我将来需要再次设置环境,这基本上也会有所帮助 :)

SSH 密钥

由于开发人员的天性就是使用 GitHub(当然还有其他服务 :)),所以我首先需要一个 SSH 密钥来向该服务进行身份验证。为此,我创建了一个新密钥(或将现有密钥复制到~/.ssh/),然后将其发布到 GitHub(通过他们的网站)。

同时密钥也被添加到了ssh-agent中,使用时无需每次都输入相应的密钥短语。

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# start the ssh-agent in the background
$ eval $(ssh-agent -s)
> Agent pid 59566

$ ssh-add ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

哦我的天啊

现在到了最精彩的部分 :) 为了让 Ubuntu shell(默认是bash)拥有真正的超能力,我把它替换成了zsh,并结合了超棒的项目Oh My Zsh(它提供了数百个插件、自定义选项、调整功能等等)。zsh一个扩展的bash shell,与bash相比有很多改进和扩展。此外,它还可以设置 shell 主题、调整命令提示符、使用自动完成功能等等。

因此,让我们安装两者:

$ sudo apt install git zsh -y

# After the installation has finished, add OhMyZsh...

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Enter fullscreen mode Exit fullscreen mode

准备就绪后,您可以通过主目录中的.zshrc文件自定义OhMyZsh(例如启用插件、设置主题)。以下是我通常进行的设置:

  • 调整主题
  • 激活插件

让我们一步一步来做……

主题

作为主题,我使用powerlevel10k(很棒的东西!),您可以在这里找到。

样本:powerlevel10k(来源:https://github.com/romkatv/powerlevel10k

安装非常简单,首先将 repo 克隆到本地机器,然后在~/.zshrc中激活主题(变量ZSH_THEME,见下面的截图):

$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH\_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
Enter fullscreen mode Exit fullscreen mode

调整主题以供使用

下次打开新 shell 时,向导将引导您完成主题的所有选项,并允许您自定义终端的外观和感觉(如果向导没有自动启动或者您想要重新启动它,只需p10k configure从命令提示符运行即可)。

该向导提供了很多选项。只需找到适合您的设置,稍微尝试一下,然后尝试其中一种即可。我的设置最终如下所示:

我的powerlevel10k设置

可选,但建议...安装相应的字体(并调整Windows 终端的settings.json以使用这些字体,参见下图):https://github.com/romkatv/powerlevel10k#meslo-nerd-font-patched-for-powerlevel10k

Windows 终端设置

插件

就 OhMyZsh 插件而言,我使用以下插件:

  • gitgit快捷方式,例如“ gp ”代表“ git pull ”,“ gc ”代表“ git commit -v ”)
  • zsh-autosuggestions / zsh-completions(命令完成/建议)
  • kubectlkubectl快捷方式/补全,例如“ kaf ”代表“ kubectl apply -f ”,“ kgp ”代表“ kubectl get pods ”,“ kgd ”代表“ kubectl get deploy ”等)
  • ssh-agent(启动时自动启动 ssh 代理)

您可以通过修改主目录中的.zshrc来添加它们:

在.zshrc 中激活 oh-my-zsh 插件

其他工具

现在开始设置我每天需要和使用的工具。我不会在这里详细介绍所有工具,因为大多数工具都很有名,或者安装起来非常简单。以下工具不需要太多解释:

再給我更多...!

我想更详细地讨论一些工具,因为它们并不一定被广泛使用和了解。这些工具主要与 Kubernetes/Docker 配合使用。kubectx /kubensstern正是属于这个领域。Docker for WindowsVisual Studio Code无疑是大家熟知的,并且在日常工作中也非常熟悉。我之所以想讨论后两者,是因为它们与 WSL2 紧密集成!

kubectx / kubens

谁不知道呢?你使用 Kubernetes,必须不断地在集群和/或命名空间之间切换……忘记使用正确的命令来正确设置上下文,结果把自己“弄死”。这时,kubectxkubens工具就派上用场了,它们可以帮助你快速轻松地在不同的集群和命名空间之间切换。说实话,我再也不想使用没有安装这些工具的系统了。要查看kubectx / kubens 的实际操作,以下是来自其GitHub仓库的示例

kubectx实际操作

kubens实际运行

要安装这两个工具,请按照以下步骤操作:

$ sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx$ sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx$ sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubensmkdir -p ~/.oh-my-zsh/completionschmod -R 755 ~/.oh-my-zsh/completionsln -s /opt/kubectx/completion/kubectx.zsh ~/.oh-my-zsh/completions/\_kubectx.zshln -s /opt/kubectx/completion/kubens.zsh ~/.oh-my-zsh/completions/\_kubens.zsh
Enter fullscreen mode Exit fullscreen mode

为了能够使用这些工具的自动完成功能,您需要在.zshrc的末尾添加以下行

autoload -U compinit && compinit
Enter fullscreen mode Exit fullscreen mode

恭喜,生产力提升:100% :)

斯特恩

_ stern _允许您将多个 Pod 的日志同时输出到本地命令行。在 Kubernetes 中,同时运行多个相互通信的服务是很常见的。有时很难跟踪集群中的调用。使用 stern 后,这变得相对容易,因为您可以通过标签选择器等工具来选择要跟踪日志的 Pod。

例如,使用以下命令stern -l application=scmcontacts,您可以将带有标签application=scmcontacts的所有 pod 的日志流式传输到本地 shell……然后看起来像这样(每种颜色代表另一个 pod!):

斯特恩日志流

要安装 Stern,请使用此脚本:s

$ sudo curl -fsSL -o /usr/local/bin/stern https://github.com/wercker/stern/releases/download/1.11.0/stern\_linux\_amd64
$ sudo chmod 755 /usr/local/bin/stern
Enter fullscreen mode Exit fullscreen mode

还有一件事

Docker for Windows已经存在很长时间了,现在可能就在你的机器上运行。有些人可能不知道,Docker for Windows 与 WSL2 无缝集成。如果你已经在 Windows 上运行 Docker,只需简单调用以下设置即可启用 Docker / WSL2 集成:

激活基于 WSL2 的引擎

选择 WSL/发行版集成

如果您想了解有关集成的更多详细信息,请访问此页面:https://www.docker.com/blog/new-docker-desktop-wsl2-backend/对于本文而言,Docker 现在在 WSL2 中运行这一事实就足够了:)

最后,同样重要的是,需要简短说明一下。当然,Visual Studio Code也可以集成到 WSL2 中。如果您在 Windows 中安装了最新版本的编辑器,则所有在 WSL2 中运行 VS Code 的组件都已包含在内。

在相应的目录中,只需使用源代码简单调用code .即可在 Ubuntu 中安装 Visual Studio Code 服务器( https://github.com/cdr/code-server )。这允许VSCode远程连接到你的发行版,并使用位于 WSL2 中的源代码/框架。

就这样 :)

包起来

我知道这篇博文已经够长了……但它包含了所有必要的工具(对此持保留态度 ;)),让你作为“云原生”领域的开发者或架构师,在 Windows 10 上获得“绝佳体验”。你拥有一个完全兼容的 Linux“系统”,并与 Windows 紧密集成。你拥有 .NET Core、Go、NodeJS、在“Kubernetes 世界”中工作的工具、目前最好的代码编辑器、git、ssh-agent 等等……以及一个美观的终端,让使用变得乐趣十足!

当然,有些东西我可能漏掉了,或者目前还不清楚。如果我忘了要提到的“那一个”工具,我很乐意听听您的意见。期待您的评论/建议!

希望以上信息能帮到大家!保重……

照片由Maxim SelyukUnsplash上拍摄

文章来源:https://dev.to/cdennig/wsl2-making-windows-10-the-perfect-dev-machine-391k
PREV
初学者的 Express 基础知识
NEXT
当没有“标准方式”时 Express REST API 的项目结构