win10th2安装失败 ()

如果觉得有帮助,请关注一波 ^_^,后续更新win10下利用WSL2安装kubernetes教程

前言

windows10目前推出了WSL2,相对于WSL采用API转换的方式, WSL2 则完全不同,win10 开始内置了一个轻量级虚拟机,经过不断的优化,这个虚拟机实现了与 windows 的高度集成,实现了虚拟机的高性能运行,WSL2 便是运行在虚拟机上的一个完整的 linux 内电脑核。因此WSL2给了在windows更接近原生linux的体验,同时wsl2 的开启速度有了非常明显的提升,几乎不需要再等待。本文探讨在win10专业版上利用WSL2安装docker的2种方式。


操作实践1.开启安装windows10的WSL2功能更新windows10系统

要升级 windows 系统到 win10 v2004 的内部版本 19041 或更高版本

升级 Windows 可以使用官方的更新助手,非常方便,地址:https://www.microsoft.com/zh-cn/software-download/windows10,在更新过程中,系统可能或多次重启。

打开系统虚拟机平台

系统更新并重启后,我们就可以开始 wsl 的升级了

首先,需要打开“系统虚拟机平台”功能,在“控制面板\所有控制面板项\程序和功能”中选择“启用或者关闭Windows功能”,勾选对应选项即可:

电脑

也可以通过在管理员权限下的 cmd 或 PowerShell 中执行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart下载 wsl2 需要使用的 linux 内核

在 https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel 页面点击下载 linux 内核更新包,下载完点击安装

启用"适用于 Linux 的 Windows 子系统"这个功能

启用"适用于 Linux 的 Windows 子系统"这个功能,然后才能在 Windows 上安装 Linux 发行版,如果之前使用过旧的wsl,此功能应该开启过。以管理员身份打开 PowerShell 运行如下所示的命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

也可以在“控制面板\所有控制面板项\程序和功能”中选择“启用或者关闭Windows功能”,勾选对应选项即可。

重启系统并设置WSL 2 设置为默认版本

# wsl命令可以设置单独某个具体wsl的linux版本为1版本但是2版本,wsl2速度较于旧版wsl快了很多,有了高铁还蹬啥自行车。wsl --set-default-version 2

查看是不是WSL2,

电脑wsl -l -v2.安装配置 Linux 发行版

选择实用比较多的ubuntu版本,其他版本未测试能否安装成功docker。

打开 Microsoft Store,搜索 Terminal,安装 Windows Terminal,用于后面和 WSL 子系统交互。

搜索 Ubuntu,选择安装。

安装完成后,第一次打开 Ubuntu 的时候,将打开一个控制台窗口,会等待几分钟来进行配置,启动完成后为 Ubuntu 创建一个用户和密码(如果第一次启动ubuntu失败,可以重启windows10系统再次试下)。

使用 Windows Terminal 来操作 Ubuntu 系统了,在 Windows Terminal 中选择 Ubuntu 发行版就可以跳转到 Ubuntu 终端中,使用上面我们配置的用户名和密码登录即可:

电脑

由于默认情况下我们不知道 root 用户的密码,所以如果我们想要使用 root 用户的话可以使用 passwd 命令为 root 用户设置一个新的密码,同时为了避免sudo切换root是需要输入密码,把自己配置的用户名加到sudo免密中,命令如下:

# 替换leap为自己单独配置的用户名 sudo echo "leap ALL=(ALL:ALL) NOPASSWD: ALL" >>/etc/sudoers 更换ubuntu的apt安装源

默认的安装源相对国内很慢,我们更换源到阿里云,登录到ubuntu到操作如下:

cp /etc/apt/sources.list /etc/apt/sources.list.bak?echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricteddeb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricteddeb http://mirrors.aliyun.com/ubuntu/ focal universedeb http://mirrors.aliyun.com/ubuntu/ focal-updates universedeb http://mirrors.aliyun.com/ubuntu/ focal multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-updates multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-security main restricteddeb http://mirrors.aliyun.com/ubuntu/ focal-security universedeb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse" >/etc/apt/sources.list

执行更新:

apt update && apt upgrade -y


3.安装docker,以下方式二选一3.1 原生linux安装docker方式

因为wsl2已经完整使用了linux内核了,此种方式和先前在linux虚拟机安装docker类似,步骤如下:

$ curl -fsSL https://get.docker.com -o get-docker.sh$ sudo sh get-docker.sh$ sudo service docker start

执行脚本安装过程中,脚本提示“建议使用Docker Desktop for windows”,20s内按Ctrl+C会退出安装,所以需要等待20s,另外此种方式需要访问外网。

检查docker安装正常

# 检查dockerd进程启动service docker statusps aux|grep docker# 检查拉取镜像等正常docker pull busyboxdocker images

注意:不同于完全linux虚拟机方式,WLS2下通过apt install docker-ce命令安装的docker无法启动,因为WSL2方式的ubuntu里面没有systemd。上述官方get-docker.sh安装的docker,dockerd进程是用ubuntu传统的init方式而非systemd启动的。


3.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)

这个时候在 WSL 里面执行 docker 命令还是找不到的

在 Resources 的WSL Integration中设置要从哪个 WSL2 发行版中访问 Docker,如下图使用的是 Ubuntu。

重启 Docker desktop for Windows,重启完成后我们就可以在 WSL2里面使用 docker 命令了

在WSL2里面执行df -Th,会发现增加了一些新的与docker有关的挂载点。

总结WSL2下原生linux安装docker方式和完全linux虚拟机安装docker类似,区别在于WSL2下的linux不支持systemd。Docker Desktop for windows方式,其实质是利用docker的C/S架构,将windows模式下的docker对应docker.sock,docker客户端二进制和docker的数据目录挂载到WSL2里面的linux机器,在此linux机器下执行docker命令(docker命令为docker客户端),实质为客户端通过 挂载的/var/run/docker.sock文件与windows里面的dockerd服务端进程通信。如下图,我们在linux下重新启动linux下dockerd进程,linux模式下下载的busybox镜像又可以看到了,/var/run/docker.sock的时间戳也被更新了,此时客户端通过/var/run/docker.sock文件与linux下的dockerd服务端通信。

要使用哪个模式下的docker,重启下该模式下的docker服务端即可,本质都是修改/var/run/docker.sock文件。理论可以同时使用,但是需要修改docker配置,通过-H参数增加dockerd的tcp监听,执行具体docker命令时指定dockerd监听的对应IP和端口即可。



电脑