WSL2、zsh 和 docker。通过 Windows 运行 Linux。或者

2025-06-10

WSL2、zsh 和 docker。通过 Windows 运行 Linux。

或者

妥协固然好,但说到科技,鱼与熊掌兼得才是王道。

我通常用来开发的机器坏了。Windows
Subsystem for Linux 2.0刚刚发布,所以我决定用它来配置另一台机器。最终,它简直太棒了。我刚刚在VSCode中的一个Oh My ZSH终端窗口启动了一个使用Docker的全栈应用程序。它的启动速度比在 Windows 上原生启动的速度还要快。我使用的是 Windows 10 家庭版,这意味着Hyper-V虚拟化技术通常不可用。但WSL2可以让你利用它(如果你的硬件支持的话)。

这篇文章描述了我设置它的步骤。

篇幅会很长,所以系好安全带!💪

安装 Insider 预览版

截至撰写本文时,WSL2 已在最新内部预览版中可用。
如果尚未安装,安装过程相当简单。

  • 查找内部程序并按照步骤激活它。

在撰写本文时,您必须在出现提示时选择快速更新。

内部程序

  • 运行 Windows 更新

Windows 更新正在安装内部版本

经过耐心的小小考验和几次重启后,您刚刚安装的版本的水印会出现在桌面的右下角。

水印

激活可选功能

WSL 和 WSL2 使用一些默认未激活的功能,因此有必要启用这些功能。

这可以通过GUI实现,通过“打开或关闭 Windows 功能”或通过提升的 Powershell 提示符。

  • GUI 选项:

打开或关闭 Windows 功能

要使用 WSL,请启用恰当命名的“Windows Subsystem for Linux”功能。

适用于 Linux 的 Windows 子系统功能

  • 通过 Powershell:


Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux


Enter fullscreen mode Exit fullscreen mode

无论您选择哪个选项,都需要重新启动。

WSL2 的功能

对于 WSL1 来说,这已经足够了。
要使用 WSL2,首先请确保在BIOS中启用了虚拟化功能。WSL2

使用 Hyper-V 技术。该技术通常仅在 Windows 10 专业版上可用,但 Windows 10 家庭版也可以将其用于 WSL2。

在BIOS中启用虚拟化功能,大多数主板品牌的设置都有所不同。

在我的MSI主板上,该选项被称为“虚拟化技术”,隐藏在超频设置中。

下一步:在 Windows 中启用另一个可选功能!

同样,您可以使用 GUI 或提升权限的 Powershell 窗口。

启用的选项称为“虚拟机平台”。

  • 图形用户界面

虚拟机平台功能

  • Powershell


Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform


Enter fullscreen mode Exit fullscreen mode

安装发行版

重启完成后,你可以前往微软商店安装你最喜欢的 Linux 发行版。我选择了 Ubuntu,因为这个发行版有很多安装说明和其他文档。

微软商店中的 Ubuntu

在您刚刚安装的发行版的第一次启动时(它以终端窗口的形式出现),当您想要以超级用户身份执行操作时,系统会要求您输入密码)。sudo

WSL1 到 WSL2

要检查安装了哪个版本的 WSL,您可以在 Powershell 中运行命令。



wsl --list --verbose
# or
wsl -l -v


Enter fullscreen mode Exit fullscreen mode

如果版本号为 2,则所有系统均正常运行!

如果不是,则将那只小狗从 1 转换为 2。



wsl --set-version <distro-name> 2
# in my case
wsl --set-version Ubuntu 2


Enter fullscreen mode Exit fullscreen mode

输出会告诉你此操作可能需要一段时间。

它不是那种只显示 5 秒后完成的操作。这里花了大约 10 分钟。

将发行版从 WSL1 转换为 WSL2

至此,WSL2 已准备就绪。

打开你安装的发行版将显示一个 bash 提示符。

Windows Subsystem for Linux 2 内置了真正的 Linux 内核。

之前有一个内核兼容层,功能有限。

用某个木偶的话来说,它现在是一个真正的男孩了

匹诺曹是一个真实的男孩

鼓励 WSL2 用户将文件放置在 Linux 根文件系统中。

这样,与 WSL1 相比,他们将能够享受文件性能的提升。

在 WSL2 中,您现在可以在 Windows 中访问 Linux 中的文件,反之亦然。

在 WSL1 中,人们一直警告不要在 Windows 中修改 Linux 文件,因为这可能会导致一些不好的事情发生。哇哦,有点吓人👻(但说实话,这确实是个坏主意。)

有关更改的更多详细信息,请参阅 Microsoft 的WSL2 发布博客文章

安装工具

让我们开始加载一些必要的工具。Windows
端还需要安装一些工具,其余的都是 Linux 工具。

我将为 Windows 安装两个软件:VSCodegit for Windows
记得将 git 的 autocrlf 设置为 input。VSCode 处理得很好。

在 Windows 中打开一个终端!



git config --global core.autocrlf input


Enter fullscreen mode Exit fullscreen mode

在开始安装 Linux 工具之前,我们将更新已经安装的软件包。

从现在开始,操作发生在您的 Linux 终端中!



sudo apt update
sudo apt upgrade


Enter fullscreen mode Exit fullscreen mode

更多准备,安装node-gyp的构建工具



sudo apt install build-essential


Enter fullscreen mode Exit fullscreen mode

Git

这个也应该安装在Linux端。



sudo apt install git


Enter fullscreen mode Exit fullscreen mode

安装 git 后,记得进行配置

这里特别需要注意的是,将 autocrlf 设置为 input。



git config --global core.autocrlf input


Enter fullscreen mode Exit fullscreen mode

Node 和 NPM

您可以将其作为独立软件包安装。

现在我们可以利用所有这些 Linux 工具了,我将使用nvm,以便更轻松地使用不同版本。

nvm repo有出色的安装说明。



curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash


Enter fullscreen mode Exit fullscreen mode

安装完成后重启终端。

确认安装成功的方法如下:



command -v nvm


Enter fullscreen mode Exit fullscreen mode

它应该返回:nvm

仅此而已,没有版本号,只有那个字符串。

要安装最新的稳定版本的节点:



nvm install node # "node" is an alias for the latest version


Enter fullscreen mode Exit fullscreen mode

当节点发布新版本时,您可以再次运行相同的命令。

你需要告诉 nvm 你想要使用哪个版本的 node。

这样下次启动 Linux 发行版时,你就必须使用这个版本了。



nvm use node


Enter fullscreen mode Exit fullscreen mode

当您正在进行的项目需要不同版本的节点时,请指定该版本。



nvm use v<version number>
# or if the project has a valid .nvmrc file
nvm use


Enter fullscreen mode Exit fullscreen mode

手动操作似乎很烦人,对吧?

有很多方法可以解决这个问题。本文稍后会“修复”这个问题。

Docker

  • 通过更新包索引和安装依赖项来开始。


sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common


Enter fullscreen mode Exit fullscreen mode
  • 添加 Dockers 的官方 GPG 密钥。


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


Enter fullscreen mode Exit fullscreen mode
  • 通过运行以下命令来验证:


sudo apt-key fingerprint 0EBFCD88


Enter fullscreen mode Exit fullscreen mode

您应该在输出中看到完整的密钥。



9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88


Enter fullscreen mode Exit fullscreen mode
  • 将 Docker 存储库添加到您的存储库列表中。


sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"


Enter fullscreen mode Exit fullscreen mode
  • 再次更新存储库列表并安装 Docker CE。


sudo apt update
sudo apt install docker-ce


Enter fullscreen mode Exit fullscreen mode

通常情况下,Docker 引擎会在安装后自动启动。但

我的情况并非如此,所以我手动启动了它。



sudo service docker start


Enter fullscreen mode Exit fullscreen mode
  • 通过启动 hello-world 容器来验证 Docker CE 是否正确安装。


sudo docker run hello-world


Enter fullscreen mode Exit fullscreen mode

Docker Compose

作为管理docker容器的便捷工具,docker-compose经常与一起安装docker-ce

  • 下载当前稳定版本并将其放在/usr/local/bin文件夹中。


sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


Enter fullscreen mode Exit fullscreen mode
  • 使文件可执行。


sudo chmod +x /usr/local/bin/docker-compose


Enter fullscreen mode Exit fullscreen mode
  • 验证安装。


docker-compose --version
# output: docker-compose version 1.24.0, build 0aa59064


Enter fullscreen mode Exit fullscreen mode

Yarn 是 Facebook 制作的 JavaScript 包管理器。

  • 添加他们的 gpg 密钥。


curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -


Enter fullscreen mode Exit fullscreen mode
  • 添加他们的存储库。


echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list


Enter fullscreen mode Exit fullscreen mode
  • 更新存储库列表并安装 Yarn。

--no-install-recommends使用时跳过安装节点nvm



sudo apt update
sudo apt install --no-install-recommends yarn


Enter fullscreen mode Exit fullscreen mode
  • 验证安装。


yarn --version


Enter fullscreen mode Exit fullscreen mode

更好的终端

当你打开终端时,实际上有两个部分在工作。

你看到并输入内容的是终端

与终端通信并完成大部分工作的是Shell

说实话,Windows 自带的终端实在太差劲了。

好消息:他们即将推出一个新终端,而且看起来真的很棒!

为了迎接新版本的发布,我不会对它做太多改动。反正我大部分时间都会使用 VSCode 中集成的那个。

7月3日编辑:Windows 应用商店现已提供预览版。我试用了,效果很棒!

更改集成的 VSCode 终端

VSCode 的集成终端极大地提升了工作效率。

让我们使用其中全新的 Linux Shell 吧。

打开集成终端时,您可以选择使用哪一个作为默认终端。

从出现的选项列表中选择 WSL,就完成了!

在 Visual Studio Code 中选择终端

或者,编辑settings.json以指向正确的位置。



"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe"


Enter fullscreen mode Exit fullscreen mode

ZSH

我选择ZSH来替换单击开始菜单中的 Ubuntu 图标时打开的标准 bash shell。

由于 Ubuntu 中的包管理器,安装它只需一行。



sudo apt install zsh


Enter fullscreen mode Exit fullscreen mode

启动 Ubuntu 时,您仍然会看到常见的 bash 提示符。

要从熟悉的 bash 提示符进入 zsh shell,请执行以下操作:



zsh


Enter fullscreen mode Exit fullscreen mode

首次启动时会显示一个快速配置向导。

此处的选择并不重要,因为.zshrc安装 oh-my-zsh 时生成的文件会被覆盖。我2还是选择了此选项,并保留了默认设置。

zsh 安装

zsh每次启动时输入bash 很快就会变得乏味。



cd $home #navigate to your home directory on Linux
code .bashrc #open the bash configuration file in visual studio code


Enter fullscreen mode Exit fullscreen mode

zsh要在打开终端时自动启动,请将其添加到您的.bashrc



# Launch Zsh
if test -t 1; then
exec zsh
fi


Enter fullscreen mode Exit fullscreen mode

哦我的天啊ZSH

zsh 的这个扩展具有最好的 URL 之一:ohmyz.sh

它还将启用大量不错的功能,这更为重要。

安装 oh-my-zsh 只需一行。



sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"


Enter fullscreen mode Exit fullscreen mode

这也将替换.zshrc我们之前初始化的文件。

欣赏酷炫的 ASCII 艺术,标志着安装成功!

主题 oh-my-zsh

oh-my-zsh 自带了很多精美的主题,那就来安装一个漂亮的主题吧!

来看看它们的列表

我喜欢 agnoster,所以我会选择它。

编辑该.zshrc文件以启用它。

此文件也位于您的 Linux 主目录中(cd $home前往那里)。



# .zshrc
# change the default theme
ZSH_THEME="robbyrussell"
# to the chosen theme
ZSH_THEME="agnoster"


Enter fullscreen mode Exit fullscreen mode

重新启动终端以使其生效。

电力线字体

啊啊啊啊啊,它……坏了。😥

丑啊我的天啊 ZSH

部分原因是这是一个奇特的提示,需要Powerline 修补的字体才能正确呈现。

您可以下载所需的特定字体并以此方式安装(双击文件并点击安装按钮),或者使用安装脚本一次性安装它们。

要一次性安装所有文件,首先克隆该仓库。

然后打开权限提升的 Powershell 窗口。

为了能够执行该install.ps1文件,我们需要暂时开启执行策略。



Set-ExecutionPolicy Bypass


Enter fullscreen mode Exit fullscreen mode

现在导航到克隆的 repo 并执行安装脚本。



.\install.ps1


Enter fullscreen mode Exit fullscreen mode

您会看到与单独下载和安装每个字体时相同的事情发生,但当然要快得多。

不要忘记立即再次关闭执行策略!



Set-ExecutionPolicy Default


Enter fullscreen mode Exit fullscreen mode

安装字体后,在终端应用程序中设置它们会将奇怪的框更改为图标。

请注意,Windows 中的标准终端在此之后仍然无法正常工作。它有很多限制,这次无法完全正常工作只是其中之一。

如前所述,我主要还是会在 VSCode 中使用终端,所以我将放弃使用标准终端。

在 VSCode 中设置终端字体后,所有图标都显示得很漂亮。

使用该命令列出目录和文件时的颜色ls看起来仍然不太理想。

丑陋的目录颜色

目录颜色

为了替换那些难看的颜色,可以使用名为 dircolors 的东西。

我将安装流行的solarized dircolors

选择您想要的主题并将文件下载到您的主目录。



curl https://raw.githubusercontent.com/seebi/dircolors-solarized/master/dircolors.ansi-dark --output ~/.dircolors


Enter fullscreen mode Exit fullscreen mode

在 zsh 配置文件的底部添加一行以使用刚刚下载的内容。



# load dircolors
eval `dircolors ~/.dircolors`


Enter fullscreen mode Exit fullscreen mode

好多了,现在看起来很棒!

漂亮的终端

oh-my-zsh 插件

oh-my-zsh 本身功能已经非常丰富。为了进一步提升效率,可以使用插件。

许多插件都随 oh-my-zsh 一起提供,因此安装它们就像在 中添加一行代码一样简单.zshrc

其他插件则需要更多努力,让我们从这些开始吧!

语法高亮

zsh-syntax-highlighting是一个方便的插件,它通过用绿色突出显示有效命令、用红色突出显示无效命令来防止语法错误。

要安装插件,首先克隆repo

然后将脚本添加到你的.zshrc



# inside .zshrc add
source <path-to-the-script>
# I cloned the repo to the .zsh folder, so for me it was
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh


Enter fullscreen mode Exit fullscreen mode

自动建议

zsh-autosuggestions会根据命令历史记录,建议下一步该输入什么,从而加快重复输入相同命令的速度。

它的安装遵循与我们上面安装的插件相同的模式。

首先克隆 repo,然后添加一行.zshrc



# .zshrc
source <path-to-the-script>
# I cloned the repo to the .zsh folder, so for me it was
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh


Enter fullscreen mode Exit fullscreen mode

预装插件

您可以在此Github 页面上查看 oh-my-zsh 附带的插件列表

每个插件都应该有一个 ,README.md它会告诉你更多关于它的功能以及如何激活插件的信息。

大多数情况下,激活插件需要你将其添加到 中的插件列表中.zshrc

这就是我最终得到的结果:



plugins=(
    git
    node
    npm
    npx
    nvm
    z
)


Enter fullscreen mode Exit fullscreen mode

这里我想推荐的插件是z

它让导航到最近的文件夹变得简单。

你没看错,这不是拼写错误。
它是 frequent 和 recent 的缩写。

例如,我的博客位于~/projects/nicky-blog
如果我输入z blog,z 就会带我到那里。

结果

呼!真是一段奇妙的旅程😅💦

效果非常棒,而且看起来也很棒!🎊🎉🎉🎉🎊

最终结果

鏂囩珷鏉ユ簮锛�https://dev.to/nickymeuleman/wsl2-zsh-and-docker-linux-through-windows-4e4m
PREV
新的一年,新的开始:我加入了 DEV 团队!
NEXT
新的 Windows 终端