前言
这玩意说白了就是一个轻量级的虚拟机,允许在Win中启动一个完整的虚拟机,比VM操作更加的友善更加的Linux,底层用的是Hyper-V。虽然WIndows中有WSL也挺好用的,但是如果需要测试一些比较敏感的Shell脚本或者操作比较底层的库的话,这玩意玩坏了就重建一个就行了。
我个人比较喜欢用这个系统去构建离线的deb的包,或者去测试一些脚本,还有运行一些服务,这样子我只要将这个虚拟机关闭我这个服务就结束了,不会影响我的Win系统,虽然WSL也能实现这个需求,但是我用下来发现他们两的使用场景不太一样,这个玩意适合运行一些辅助服务,WSL更加适合开发使用。Docker-Desktop也能运行服务的说,但是总的来说这里面运行的服务会更加的稳定,不会受到Win的影响,长时间运行的服务我更喜欢放这个里面运行。
总的来说存在即合理,和WSL有不同的使用场景,看个人需要。
安装
开启 Hyper-V
控制面板->程序->启用或关闭Windows功能->Hyper-V
将这个选项勾选好,然后点击确认,安装提示操作即可,开启之后需要重启电脑。
安装 Multipass
Multipass下载地址
下载完毕之后双击安装一直下一步就安装完毕了。
装完了需要将存储地址改一下,如果只有C盘就当我没说这个,如果放C盘,久了会影响Win的运行速度
mkdir "D:\Multipass"
Set-ItemProperty -Path "HKLM:System\CurrentControlSet\Control\Session Manager\Environment" -Name MULTIPASS_STORAGE -Value
安装完毕之后要重启一下电脑,否则存储位置不会变!!!
创建网桥供虚拟机使用(固定IP用)
这一步如果不指定一个网卡的话一些持久运行的虚拟机就会出现每次启动IP和网关地址都会变的问题
我建议是指定一个,后期会比较方便。
# 创建虚拟机的网络
New-VMSwitch -SwitchName "vmnet" -SwitchType Internal
# 创建虚拟网卡
New-NetIPAddress -IPAddress "158.50.0.1" -PrefixLength 24 -InterfaceAlias "vEthernet (vmnet)"
# 开启NAT
New-NetNat -Name vmnet -InternalIPInterfaceAddressPrefix 158.50.0.0/24
新建虚拟机
# 创建一个 4核心 4G内存 10G存储的虚拟机 并将虚拟网络 vmnet作为第二个网卡
multipass launch --name vm1 --cpus 4 --memory 4G --disk 20G --network name=vmnet,mode=manual
进入虚拟机中
执行如下的命令就会进入虚拟机的命令行中
multipass shell vm1
配置虚拟机固定IP
启动的就是一个完整的Ubuntu虚拟机,可以直接使用Ubuntu的方式进行IP固定
打开配置文件,并添加如下的配置即可
配置文件地址为 sudo vi /etc/netplan/50-cloud-init.yaml
eth1: # 网卡名称,这是固定的
addresses: [158.50.0.2/24] # IP地址,连接的网卡同段即可,可以选择0.2~0.253之间
gateway4: 158.50.0.1 # 网卡的网关
nameservers:
addresses: [114.114.114.114] # DNS地址
修改完毕应该是这样的
然后执行网络重启指令可以
sudo netplan apply
宿主机端口转发
虚拟机安装之后所有的服务和端口都只能在本机进行访问,如果想要外部也访问这个端口提供的服务,需要将Win的端口做一个转发
# 开启WIndows的防火墙
New-NetFirewallRule -DisplayName "Allow TCP 80" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow
# 端口转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=158.50.0.2 connectport=80
常用指令集
multipass shell <vm_name> # 进入某个虚拟机
multipass stop <vm_name> # 停止某个虚拟机
multipass start <vm_name> # 启动虚拟机
multipass restart <vm_name> # 重启虚拟机
multipass list # 列出虚拟机列表
multipass delete <vm_name> # 清理已经删除的虚拟机
multipass purge # 清理已经删除的虚拟机
multipass --help # 查看指令帮助