前言
由于平时开发是在Windows下启动一个VMWare虚拟机使用Linux系统辅助开发及测试,但VMWare虚拟机占用大量磁盘内存资源,操作和维护也非常繁琐。windows10推出了WSL2,以上问题得到了完美的解决。
WSL2相比WSL1来说使用linux内核可以真正完美支持Docker。与WSL1的模拟Linux API不同的是,WSL2采用在Hyper-V虚拟机中运行的方案。经过不断的优化,这个虚拟机实现了与 windows 的高度集成,实现了虚拟机的高性能运行,WSL2 便是运行在虚拟机上的一个完整的 linux 内核。因此WSL2给了在windows更接近原生linux的体验,同时wsl2 的开启速度有了非常明显的提升,几乎无需等待。
WSL2安装步骤(docker基础配置)
1 更新 Win10 到2004版本
使用Windows Update自动更新到20H2版本号。如果没有检测到更新,可以去微软官网下载“易升”工具并安装运行。工具会检测到更新并安装。
2 启用Linux子系统
打开 控制面板 -> 程序 -> 启用或关闭Windows功能。找到“适用于Linux的Windows子系统”和“虚拟机平台”,勾选这两项之后确定,并重新启动计算机。
1 启用"虚拟机平台"
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
2 启用"适用于 Linux 的 Windows 子系统"
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
3 下载 wsl2 需要使用的 linux 内核
在 https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel 页面点击下载 linux 内核更新包,下载完点击安装
4 设置系统WSL默认版本
使用管理员用户打开CMD,设置wsl默认版本为2:
wsl --set-default-version 2
5 安装Ubuntu发行版
打开Microsoft Store,搜索ubuntu,界面如下所示:
根据自己的需要,此处选择Ubuntu-20.04LTS版本并安装。完成之后在开始菜单会出现Ubuntu菜单项。打开它,Ubuntu将会进行初始化操作。等待几分钟后按照提示,为Ubuntu设置用户名和密码。最后,我们需要验证Ubuntu是否在WSL2的环境下启动。以管理员用户打开powershell,执行:
wsl -l -v
如果看到如下信息:
NAME STATE VERSION
* Ubuntu-20.04 Running 2
说明Ubuntu在WSL2环境下运行。到此为止安装完毕。
说明Ubuntu运行在WSL1下。需要手工切换。首先关闭WSL下运行的Linux,执行:
wsl --shutdown
然后执行:
wsl --set-version Ubuntu-20.04 2
其中Linux发行版名称为前面安装的Linux名称,可以通过wsl -l -v
命令查看。执行命令后等待片刻。等命令行提示转换完成,我们已经成功将Linux切换到WSL2环境。
另外,也可以使用 Windows Terminal 来操作 Ubuntu-20.04,在 Windows Terminal 中选择 Ubuntu20.04就可以跳转到 Ubuntu 终端中,使用上面我们配置的用户名和密码登录即可。
安装Docker方式:
1 原生linux安装Docker
首先进入Ubuntu shell,更换Ubuntu-20.04官方源为国内源,加快下载速度。执行。
vim /etc/apt/sources.list
将内容替换为下方(注意版本代号focal):
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse
执行更新:
apt update && apt upgrade -y
wsl2已经完整使用了linux内核此种方式与之前在vmware虚拟机安装docker类似,依次执行如下命令:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
执行脚本安装过程中,脚本提示“建议使用Docker Desktop for windows”,20s内按Ctrl+C会退出安装,所以需要等待20s,此种方式需要访问网络。
最后一个步骤,启动Docker daemon。但是此处有一个问题,WSL2经过测试无法使用systemctl命令(此问题已经解决),因此我们使用service命令启动Docker daemon进程。命令如下所示:
sudo service docker start
* Starting Docker: docker
至此,Docker 在WSL2下安装完毕。
注:WSL2 Docker最爽的地方是和宿主机Win10共享network(注意宿主机重启后IP地址会变化存在问题,待后续补充解决方法)
宿主机Win10使用localhost加端口号就可以访问WSL2中Docker对应container中的服务,十分方便。
查看Docker版本:
2 Docker Desktop for windows方式
Docker 也专门开发了可以使用 WSL2
中的 Docker
守护进程的桌面管理程序, 打开 Docker Desktop WSL2 backend 页面,下载最新的 Docker Desktop for Windows 程序 ,建议下载stable版本。
下载地址:https://www.docker.com/products/docker-desktop
启动Docker Desktop for Windows,点击“设置”按钮,启用基于WSL2
的引擎复选框(Use the WSL 2 based engine)
在 Resources 的WSL Integration中设置 WSL2 发行版中访问 Docker,如下图使用的是 kali-linux。
重启 Docker desktop for Windows完成后就可以在 WSL2里面使用 docker 命令。
在WSL2里面执行df -h
,会发现增加了一些新的与docker有关的挂载点:
总结
WSL2下原生linux安装docker方式和完全linux虚拟机安装docker类似,区别在于WSL2下的linux不支持systemd。
Docker Desktop for windows方式,实质是利用docker的C/S架构,将windows模式下的docker对应docker.sock,docker客户端二进制和docker的数据目录挂载到WSL2 Ubuntu-20.04,在此Ubuntu-20.04下执行docker命令实质为客户端通过 挂载的/var/run/docker.sock文件与windows里面的dockerd服务端进程通信。我们在Ubuntu-20.04下重新启动Ubuntu-20.04下dockerd进程,/var/run/docker.sock的时间戳也被更新,此时客户端通过/var/run/docker.sock文件与linux下的dockerd服务端通信。
关闭虚拟机
WSL2实际上是在虚拟机中运行。我们一旦进入WSL2 Linux的命令行,虚拟机会自动启动运行。如果我们查看任务管理器,会发现一个Vmmem进程。如下所示:
该进程是虚拟机的进程。它比较占内存。不使用WSL2的时候我们可以关闭它以节省内存。关闭WSL2 Linux的方法如下。使用管理员打开CMD,运行:
wsl --shutdown
卸载发行版
有时候某个Linux发行版不再使用,或者是环境被搞坏需要重装,这时候我们可以卸载掉这个Linux发行版。方法如下。
首先使用命令查看系统内安装的Linux发行版:
wslconfig /l
Windows Subsystem for Linux Distributions:
Ubuntu-20.04(Default)
然后使用如下命令卸载:
wslconfig /u Ubuntu-20.04
Win10与wsl2子系统互相访问
Win10访问wsl2系统比vm虚拟机是亮点,特别方便,进入CMD或者PowerShell,输入:
cd \\wsl$\Ubuntu-20.04\
可以进入Ubuntu-20.04子系统根目录,如下图所示:
或者打开文件资源管理器,在地址栏输入\\wsl$\Ubuntu-20.04\
,也可以Ubuntu-20.04子系统根目录。
Linux子系统访问Win10文件
进入Linux子系统运行df -h
,看到如下:
WSL2默认C盘迁移问题,WSL2 IP地址的问题待续.


点个

在看
你最好看