最详尽教程完整介绍-Windows 的 Linux 子系统-WSL1&WSL2


安装 WSL

1. 开启 WSL

必须启用“适用于 Linux 的 Windows 子系统”可选功能并重启,然后才能在 Windows 上运行 Linux 发行版。

以管理员运行 Powershell(开启 WSL,如已开启可跳过)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform –启用“虚拟机平台”可选组件
image.png

2. 安装 WSL Linux 发行版本

image.png

比较 WSL 1 和 WSL 2

WSL 1 和 WSL 2 之间的主要区别在于,在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。
image.png

WSL2 相比 WSL1 来说可以完美支持 Docker。与 WSL1 的模拟 Linux API 不同的是,WSL2 采用在 Hyper-V 虚拟机中运行的方案。可以说 WSL2 和原汁原味的 Linux 已经十分接近

  • WSL1 没有 Linux 内核,不支持 docker;WSL2 是有 Linux 内核的轻量化虚拟机,支持 docker。
  • 目前 docker 已经针对 WSL2 做了适配,安装时检测到 WSL2 就会启用 WSL2 后端,不仅能同时在 Windows 和 WSL 下操作 docker 服务器,还比以前的 docker on Windows 启动更快、占用资源更少。

image.png

WSL1

不支持 Docker 的守护进程,但您可以使用Docker CLI连接到通过Docker for Windows或您创建的任何其他 VM 运行的远程 Docker 守护进程

不能完全兼容 systemctl, systemd 等等,IO 速度相对原生 Linux 也是大打折扣,在编译和解压方面可以很深体会到。毕竟不是真正的 Linux,而是挂在 Windows NT 内核之上的仿 Linux 系统
image.png

WSL1 与 Docker 集成

由于 WSL 还不是原生的 Linux,所以需要借助Docker for Windows来实现 Docker(Docker for Windows 是基于 Hyper-V 技术)
image.png
image.png

另外一种方式是,在 WSL1 中安装 docker 客户端,连接 docker server, 来解决在 WSL1 上使用 docker 的问题。(PS: Win10 的 Linux 子系统是装不了 docker (服务端)的,但是可以安装客户端)

sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo apt remove gpg
sudo apt install gnupg1
sudo apt install software-properties-common
sudo add-apt-repository “deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable”
sudo apt-get -y update
sudo apt-get -y install docker-ce
echo “export DOCKER_HOST=tcp://localhost:2375” >> ~/.bashrc && source ~/.bashrc
image.png

参考

WSL2

WSL2 是第二代 WSL,包含在 2020 年 5 月正式发布 Windows 10 v2004 版中。相比第一代,新的 WSL2 重新设计了架构,使用真正的 Linux 内核,几乎具有 Linux 的所有完整功能。启用 WSL2 的 Linux 系统启动时间非常快,内存占用很少,并且,WSL 2 还可以直接原生运行 Docker,VS Code 编辑器还有 Remote-WSL 插件,相对于完整的 linux 虚拟机只是不支持 systemctl、systemd,不能直接运行图形桌面。Windows 也越来越向虚拟平台靠拢,Windows NT 内核和 Linux 内核都是运行在虚拟平台之上的,是平级的
image.png

We will replace the Hyper-V VM we currently use by a WSL 2 integration package. This package will provide the same features as the current Docker Desktop VM: Kubernetes 1-click setup, automatic updates, transparent HTTP proxy configuration, access to the daemon from Windows, transparent bind mounts of Windows files, and more.

image.png

升级到 WSL2

如果发现 VERSION 为 1,说明 Ubuntu 运行在 WSL1 下,可以升级到 WSL2。同样,WSL2 也可以降级到 WSL1。
wsl -l -v #查看已安装 Linux 版本和名称,完整命令格式:wsl –list –verbose
image.png
**WSL2 需要 Windows build 18917 更新, **WSL 不需要. 但是最好首先将操作系统更新到需要的版本, 而不是先安装 WSL 再更新
WSL 2 需要更新其内核组件。有关信息,请访问
https://aka.ms/wsl2kernel

具体步骤参考 : https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能
image.png
wsl –set-version Ubuntu 2 #升级到 WSL2,其中 Ubuntu 是已经安装的 Linux 名称,命令格式:wsl –set-version
image.png

启用 WSL 后,通过 \wsl$ 可以访问 WSL 文件
image.png

WSL2 与 docker 集成

最初的 WSL 是在 Windows 之上模拟 Linux 内核,但是 Windows 和 Linux 之间存在如此基本的差异,以至于某些事情不可能以与本机 Linux 相同的行为实现,这意味着不可能直接在 WSL 中运行Docker Engine和 Kubernetes
在 WSL1 中,Docker Desktop 通过 Hyper-V 虚拟机去运行 docker 环境的
image.png

升级到 WSL2 之后, Docker Desktop 可以直接用 WSL2,直接运行在 Linux 内核上了
image.png
通过如下设置,Docker Desktop 就和 WSL2 分发版本进行了集成,无需在 WSL 中安装 docker; 当然,也可以选择不与 Docker Desktop 集成,直接在 WSL 中运行 docker 容器。
image.png
image.png
启用 WSL 后,docker 运行数据都在 WSL 发行版中,文件位置都只能由 WSL 管理

安装 docker 后,docker 会自动创建 2 个发行版:

  • docker-desktop
  • docker-desktop-data

image.png
image.png
WSL 发行版默认都是安装在 C 盘,在%LOCALAPPDATA%/Docker/wsl 目录
docker 的运行数据、镜像文件都存在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx 中

通过 WSL 2 集成,您仍然可以体验到与 Windows 的无缝集成,但在 WSL 中运行的 Linux 程序也可以执行相同的操作。这对于从事面向 Linux 环境的项目或为 Linux 量身定制的构建过程的开发人员产生了巨大影响。不再需要维护 Linux 和 Windows 构建脚本!例如,Docker 的开发人员现在可以在 Windows 上的 Linux Docker 守护程序上工作,使用与 Linux 计算机上的开发人员相同的工具和脚本集:

注:WSL2 Docker 最爽的地方是和宿主机 Win10 共享 network,我们在宿主机 Win10 使用 localhost 加端口号就可以访问 Docker 中对应 container 中的服务,十分方便
image.png

WSL 使用

wsl #启动
wsl –shutdown #关闭所有正在运行的 Linux 和 WSL 2

启动 WSL2 之后,会在任务管理器中发现多了一个 虚拟机工作线程
image.png

访问 wsl 文件
image.png

卸载发行版
有时候某个 Linux 发行版不再使用,或者是环境被搞坏需要重装,这时候我们可以卸载掉这个 Linux 发行版。方法如下。

  • 首先使用:wslconfig /l 命令查看系统内安装的 Linux 发行版。
  • 然后使用:wslconfig /u <发行版名称>卸载掉指定的发行版 Linux。

文章作者: Owen Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Owen Li !
  目录