Windows10启用WSL2,安装子系统Ubuntu20.04.4 LTS并在Ubuntu中部署docker

0、背景

对于使用Windows作为桌面系统的朋友,想要学习docker的使用,docker的环境无疑就是最初的学习障碍了。虽然现在有了Docker Desktop(最新版也支持了WSL2,但性能还是不够高),然其性能和体验度都不太高。为了部署一套微服务架构的程序,我16G的内存很多时候是不够用的。为了提高docker的运行性能本文就介绍一下如何在Windows10中启用WSL2,并安装Linux(Ubuntu)子系统,并在Ubuntu中部署docker。

1、WSL简介

WSL其实就是windows subsystem for linux的缩写,2表示版本。就是说你的电脑启用WSL2后,就可以把Linux(各个版本)操作系统当作一个应用程序安装到你的Windows系统中,你启动这个应用程序后就进入到Linux系统中了,你可以象使用原生Linux操作系统一样操作这个应用程序。

2、更新Windows以支持WSL2

WSL2的启用是对Windows10的版本有要求的,windows的内部版本要高于19041才行,因此在启用WSL2时,请先升级你的Windows到最新版本。
在这里插入图片描述

3、启用WSL2

3.1 首先要启用WSL

3.1.1 启用WSL有2种方式,第一种方式是图形操作的方式,即在控制面板-程序- 启用或关闭windows功能,勾上"适用于Linux的Windows子系统"选项,如下图:
在这里插入图片描述
3.1.2 第二种方式是通过Power Shell命令的方式,首先以管理身份打开Windows Power Shell,然后输入以下命令:

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

3.2 开启虚拟机平台

3.2.1 开启虚拟机平台也有2种方式,第一种是图形操作的方式,即在启用或关闭Windows功能中勾选"虚拟机平台",如下图:
在这里插入图片描述
3.2.2
第二种方式是通过Power Shell命令的方式,首先以管理身份打开Windows Power Shell,然后输入以下命令:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

3.3 设置WSL版本为WSL2

首先以管理身份打开Windows Power Shell,然后输入以下命令:

wsl --set-default-version 2

3.4 手动下载WSL2 Linux内核更新包的地址和操作过程

适用于x64计算机的WSL2 Linux内核更新包下载
详细请参考微软官方文档:https://docs.microsoft.com/zh-cn/windows/wsl/install-manual

4、在微软应用商店中选择安装你偏好的Linux分发版(我选的Ubuntu)

4.1 首先打开Microsoft Store,直接搜索Ubuntu,在搜索结果中找到一个版本点击“获取”按钮进行安装,我安装的是Ubuntu 22.04.4 LTS,,安装完毕如下图:
在这里插入图片描述
4.2 点击上图中的“打开”按钮或者在开始菜单中找到Ubuntu 20.04.0 LTS点击,就会打开一个控制台窗口,首次进入系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上,再次进入启动时间不到一秒。
4.3 首次进入Ubuntu会提示让你输入一个新的用户名,咱们按提示输入一个新的用户名就可以,然后会提示输入密码2次,根据自己情况进行设置就行。之后就可以使用Ubuntu了。
在这里插入图片描述

4.3 关于Linux分发版本的选择,这个并没有什么特殊限制,纯属应用场景需要和个人偏好,常用的Linux分发版本如下:

  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
  • Ubuntu 22.04 LTS
  • openSUSE Leap 15.1
  • SUSE Linux Enterprise Server 12 SP5
  • SUSE Linux Enterprise Server 15 SP1
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix for WSL
  • Pengwin
  • Pengwin Enterprise
  • Alpine WSL
  • Raft(免费试用版)

5、修改Ubuntu软件源并更新软件包

5.1 修改Ubuntu软件源

在Microsoft Store中安装的Ubuntu基本是一个空白的简易系统,很多常用的工具和包都没有,因此要想正常使用Ubuntu,我们还需要安装很多工具包,比如网络工具包(支持ifconfig、netstat等命令的使用);还有支持http下载的工具包(apt-transport-https、ca-certificates、curl、sofware-properties-common等等)。但由于国内外网络限制的问题,我们在使用apt-get install安装软件时,如果软件源的地址不能正常访问就会导致失败,因此我们安装完Ubuntu后的第一步就是修改软件源。我们可以使用阿里提供的软件源。具体需要修改Ubuntu的/etc/apt/sources.list文件内容。
首先把原来的/etc/apt/sources.list文件备份一下,命令如下:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

使用vim工具打开/etc/apt/sources.list,命令如下:

sudo vim /etc/apt/sources.list

注释掉原来的内容或者删除原来的内容,然后根据阿里官网提供的软件源地址进行编辑,注意不同版本的Ubuntu,软件源地址不同,详情参考:https://developer.aliyun.com/mirror/ubuntu
我的Ubuntu版本是20.04.4,因此对应的内容如下:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

# 预发布软件源,不建议启用
# deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

如下图:
在这里插入图片描述
修改完毕按ESC,输入:wq,保存/etc/apt/sources.list

5.2 更新软件源

/etc/apt/sources.list修改保存后要使之生效,需要执行以下命令
5.2.1 更新软件源,命令如下:

sudo apt-get install update

5.2.2 更新已安装的包,命令如下:

sudo apt-get install upgrade

5.2.3 更新apt包索引,命令如下:

sudo apt-get update

6、安装net-tools和openssh-server,以便在Windows端使用MobaXterm远程操作Ubuntu

6.1 安装openssh-server

为了方便在Windows端或者其他同事的电脑上使用MobaXterm远程操作Ubuntu,我们首先要在Ubuntu上安装openssh-server,安装命令如下:

sudo apt-get install net-tools openssh-server

6.2 启动ssh服务

安装完毕openssh-server后需要启动ssh服务,命令如下:

sudo service ssh start

然后通过以下命令检测ssh服务是否已启用

sudo ps -e | grep ssh

如果结果如下,则说明正常启用了。
在这里插入图片描述

6.3 修改/etc/ssh/sshd_config,开启密码验证

默认安装完openssh-server后,如果使用MobaXterm创建一个SSH会话连接时是不能正常连接的,会提示公钥缺失。我们需要开启ssh密码验证,这样就可以在MobaXterm端输入用户密码进行远程连接了。
使用vim命令打开/etc/ssh/sshd_config,命令如下:

sudo vim /etc/ssh/sshd_config

找到PasswordAuthentication no
改为PasswordAuthentication yes
如下图:
在这里插入图片描述
之后按ESC,输入:wq,进行保存退出vim。

6.4 重启ssh服务,然后通过MobaXterm进行远程连接Ubuntu

重启ssh服务的命令如下:

sudo service ssh restart

然后输入ifconfig,查看一下Ubuntu的ip地址,如下图:
在这里插入图片描述
在MobaXterm中新建一个Session,输入Ubuntu的IP地址和用户名,如下图:
在这里插入图片描述
点击OK,进入会话,第一次会提示输入密码,把之前设置的密码输入后回车就行了。这样就远程连接上了。如下图:
在这里插入图片描述

7、安装网络工具和其他一些必要的工具

命令如下:

sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

执行过程如下:
在这里插入图片描述
在这里插入图片描述

8、在Ubuntu中部署Docker

8.1首先安装GPG证书

安装命令如下:

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

执行结果如下:
在这里插入图片描述

8.2 添加docker软件源信息(注意,在使用阿里云提供的软件源信息时,不同版本的ubuntu,docker源地址有所不同,要跟自己的ubuntu版本匹配才行)

命令如下:

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu focal stable"

然后对软件源进行更新,如下:

sudo apt-get update

以上命令其实就是修改的/etc/apt/sources.list的内容并执行更新。

注意,不要使用${lsb_release -cs}通配符,因为会导致在/etc/apt/sources.list中添加多个源,如果某个源地址无效,就会导致后面的docker安装失败。那样还需要手动修改/etc/apt/sources.list。

8.3 安装最新版Docker Engine-Community和Containerd

安装命令如下:

sudo apt-get install docker-ce docker-ce-cli containerd.io

安装过程如下图:
在这里插入图片描述

8.4 启动docker

sudo service docker start

执行如下图:
在这里插入图片描述
至此,docker部署完毕。

9、关于Windows10的WSL2下子系统的重启问题

虽然我们能够象使用原生Ubuntu系统一样使用WSL2下的Ubuntu,但是有些指令是不能执行的,比如关机(shutdown)和重启命令(reboot)。执行如下图:
在这里插入图片描述
那我们如何实现子系统的重启和关闭呢,其实WSL2子系统是通过Windows10的LxssManager服务管理的,因此我们只要停止和启动LxssManager服务就实现了WSL2子系统的关闭和启动。首先以管理员方式打开Windows PowerShell或者CMD。然后执行以下命令:

net stop LxssManager
net start LxssManager

执行如下图:
在这里插入图片描述
这样就实现了WSL2子系统Ubuntu的重启操作,当然你重启Windows10时也会把WSL2子系统进行重启的。

10、关于Windows10的WSL2下子系统重启后IP地址变化的问题

我们在Windows10的WSL2子系统Ubuntu做了一些软件安装和配置,然后重启,发现有些配置失效了,检查发现里面有些配置用到了Ubuntu的IP地址。但是每次重启WSL2子系统后,通过ifconfig执行查看eth0的IP地址都会不同。起始通过在Windows主系统中我们通过netstat -a -n命令分析就会发现,你在WSL2子系统Ubuntu部署的所有服务所占用的端口都会自动映射到Windows主系统的127.0.0.1这个地址上。也就是说你访问127.0.0.1:port就相当于访问Ubuntu的eth0的IP:port。也就说我们在其他程序或服务用要调用或引用Ubuntu子系统部署的服务时,直接写127.0.0.1:port,port就是服务占用的端口号,而无需关注Ubuntu子系统的IP变化问题。
举例:

  • 在Windows的MobaXterm建立SSH会话时,Remote Host直接填入127.0.0.1即可。
  • Ubuntu子系统部署了docker,然后docker下拉了nacos镜像,并运行了此nacos镜像,占用了8848端口,在windows的java程序开发微服务时配置nacos地址为:127.0.0.1:8848即可。
   sudo docker run -d --name nacos -e MODE=standalone -p 8848:8848 nacos/nacos-server
  • Ubuntu子系统部署了docker,然后docker下拉了redis镜像,并运行了此redis镜像,占用了6379端口,在windows的java程序开发微服务时配置redis地址为:127.0.0.1:6379即可。
   sudo docker run -itd --name redis -p 6379:6379 redis
  • Ubuntu子系统部署了docker,然后docker下拉了fastdfs镜像,并分别运行此fastdfs镜像为tracker和storage,如下:
   sudo docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
   sudo docker run -d --name storage --net=host -e TRACKER_IP=127.0.0.1:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh

在windows的java程序开发微服务时配置fastdfs地址示例如下:

   wgms:
     fdfs:
       web-url: 127.0.0.1
       web-port: 8080
       trackerList: ${
     
     wgms.fdfs.web-url}:22122

猜你喜欢

转载自blog.csdn.net/zlbdmm/article/details/126012360