• 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
    
    • 1

    3.2 开启虚拟机平台

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

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

    3.3 设置WSL版本为WSL2

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

    wsl --set-default-version 2
    
    • 1

    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
    
    • 1

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

    sudo vim /etc/apt/sources.list
    
    • 1

    注释掉原来的内容或者删除原来的内容,然后根据阿里官网提供的软件源地址进行编辑,注意不同版本的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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    5.2 更新软件源

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

    sudo apt-get install update
    
    • 1

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

    sudo apt-get install upgrade
    
    • 1

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

    sudo apt-get update
    
    • 1

    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
    
    • 1

    6.2 启动ssh服务

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

    sudo service ssh start
    
    • 1

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

    sudo ps -e | grep ssh
    
    • 1

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

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

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

    sudo vim /etc/ssh/sshd_config
    
    • 1

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

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

    重启ssh服务的命令如下:

    sudo service ssh restart
    
    • 1

    然后输入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
    
    • 1

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

    8、在Ubuntu中部署Docker

    8.1首先安装GPG证书

    安装命令如下:

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

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

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

    命令如下:

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

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

    sudo apt-get update
    
    • 1

    以上命令其实就是修改的/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
    
    • 1

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

    8.4 启动docker

    sudo service docker start
    
    • 1

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

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

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

    net stop LxssManager
    net start LxssManager
    
    • 1
    • 2

    执行如下图:
    在这里插入图片描述
    这样就实现了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
    
    • 1
    • Ubuntu子系统部署了docker,然后docker下拉了redis镜像,并运行了此redis镜像,占用了6379端口,在windows的java程序开发微服务时配置redis地址为:127.0.0.1:6379即可。
       sudo docker run -itd --name redis -p 6379:6379 redis
    
    • 1
    • 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
    
    • 1
    • 2

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

       wgms:
         fdfs:
           web-url: 127.0.0.1
           web-port: 8080
           trackerList: ${wgms.fdfs.web-url}:22122
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    i.MX6ULL驱动开发 | 32 - 手动编写一个虚拟网卡设备
    js常见面试题
    Linux安装ffmpeg
    数据结构与算法——线性查找法
    uniapp&小程序打开地图导航
    解析CAD图纸出现乱码的原因及解决方法
    推荐 7 个本周 yyds 的开源项目
    u盘被格式化了文件还可以恢复吗?
    记录学习--lombok @Generated
    【PAT(甲级)】1073 Scientific Notation
  • 原文地址:https://blog.csdn.net/zlbdmm/article/details/126012360