轻量级虚拟机Multipass使用教程
轻量级虚拟机Multipass使用教程

轻量级虚拟机Multipass使用教程

Multipass 是一个轻量虚拟机管理器,是由 Ubuntu 运营公司 Canonical 所推出的开源项目。运行环境支持 Linux、Windows、macOS。在不同的操作系统上,使用的是不同的虚拟化技术。在 Linux 上使用的是 KVM、Window 上使用 Hyper-V、macOS 中使用 HyperKit 以最小开销运行VM,支持在笔记本模拟小型云。

同时,Multipass 提供了一个命令行界面来启动和管理 Linux 实例。下载一个全新的镜像需要几秒钟的时间,并且在几分钟内就可以启动并运行 VM。

Multipass官网:https://multipass.run/

注意:您需要使用 Windows 10 Pro/Enterprise/Education v 1803 或更高版本,或任何装有 VirtualBox 的 Windows 10。

查看所有支持的镜像

multipass find

虚拟机创建好后,你是不是想知道,虚拟机文件存放在哪呢?

注意:虚拟机是默认安装在C盘的,随着长时间使用或者创建的虚拟机越来越多,虚拟机文件夹会越来越大,C盘的空间就要告警了,如果电脑只有一个C盘的可以不继续看了。

1、请先检查multipass服务是否开启,已开启则停止服务;

2、将"C:\ProgramData\Multipass"目录剪切到其他盘,例如:"D:\Multipass"

3、然后通过下面命令创建文件夹链接

mklink /J "C:\ProgramData\Multipass" "D:\Multipass"

4、执行mklink时可能会出现“ 当文件已存在时,无法创建该文件。”的报错,请检查"C:\ProgramData\Multipass"是不是还存在,存在请删除,刷新文件夹,确保已不存在即可创建成功,再也不用担心C盘被撑爆了。
为了在安装虚拟机后不占用C盘空间,以下是使用 PowerShell 编写的一段批处理代码:

# 检查是否以管理员身份运行,如果没有则重新以管理员身份运行此脚本

If (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
# 获取脚本的当前位置
$scriptPath = $MyInvocation.MyCommand.Path
# 以管理员身份重新启动 PowerShell
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File "$scriptPath"" -Verb RunAs
# 退出当前脚本
Exit
}

# 停止 Multipass 服务

$serviceName = "Multipass"
Try {
Stop-Service -Name $serviceName -Force -ErrorAction Stop
Write-Output "成功停止服务 $serviceName。"
} Catch {
Write-Error "无法停止服务 $serviceName。请确保服务名称正确,并且以管理员身份运行 PowerShell。"
Exit
}

# 等待服务完全停止

Start-Sleep -Seconds 5

# 定义源和目标路径

$sourcePath = "C:\ProgramData\Multipass"
$destinationPath = "D:\Multipass"

# 确保目标路径存在

If (-Not (Test-Path -Path $destinationPath)) {
New-Item -Path $destinationPath -ItemType Directory -Force
Write-Output "创建目标路径 $destinationPath。"
}

# 移动文件

Try {
Move-Item -Path "$sourcePath*" -Destination $destinationPath -Force
Write-Output "成功移动文件到 $destinationPath。"
} Catch {
Write-Error "移动文件失败。请确保有足够的权限。"
Exit
}

# 删除源路径

Try {
Remove-Item -Path $sourcePath -Recurse -Force
Write-Output "成功删除源路径 $sourcePath。"
} Catch {
Write-Error "无法删除源路径 $sourcePath。请确保有足够的权限。"
Exit
}

# 创建符号链接

Try {
cmd /c mklink /J "$sourcePath" "$destinationPath"
Write-Output "成功创建符号链接。"
} Catch {
Write-Error "无法创建符号链接。"
Exit
}

# 启动 Multipass 服务

Try {
Start-Service -Name $serviceName
Write-Output "成功启动服务 $serviceName。"
} Catch {
Write-Error "无法启动服务 $serviceName。请确保服务名称正确,并且以管理员身份运行 PowerShell。"
Exit
}

Write-Output "Multipass 数据已成功移动到 $destinationPath 并重新启动服务。"

代码下载:https://benson88.lanzn.com/iCHMx1zlsosd

multipass数据目录的配置

以管理身份运行PowerShell,输入以下命令:

Set-ItemProperty -Path "HKLM:System\CurrentControlSet\Control\Session Manager\Environment" -Name MULTIPASS_STORAGE -Value "E:\MultipassData"

关于Multipass的一些常用命令我们可以通过multipass help来查看

新建和运行Ubuntu

multipass launch --name vm1
创建一个名为 vm1 的虚拟机实例,launcher后面不带参数,则表示安装最新版Ubuntu 24.04
multipass launch 22.04 --name vm2
创建一个名为vm2的Ubuntu 22.04实例
multipass launch --name vm3 -c 4 -m 4G -d 300G
新建 4核心 4GB内存 300G虚拟磁盘的Ubuntu 实例
-n, --name: 名称
-c, --cpus: cpu核心数, 默认: 1
-m, --mem: 内存大小, 默认: 1G
-d, --disk: 硬盘大小, 默认: 5G
查看虚拟机列表
multipass list
这条指令可以看到虚拟机详细信息,名称,状态,地址,镜像名称等信息。
启动停止实例
# 停止
multipass stop vm1
# 停止全部虚拟机
multipass stop --all
# 启动
multipass start vm1

删除、恢复、永久删除实例
# 删除
multipass delete vm1
# 恢复
multipass recover vm1
# 对已删除的实例永久删除
multipass purge

外部操作虚拟机

通过 multipass exec 命令在实例内执行给定的命令。第一个参数是运行命令的实例

通过 exec 命令,就可以在外部操作刚刚创建的虚拟机,例如查看内部所处的目录,执行 pwd 命令

multipass exec vm1 pwd

查看虚拟机信息

通过 multipass info 命令,即可查看当前运行的虚拟机信息

multipass info vm1

进入虚拟机

通过 multipass shell 命令,即可进入到虚拟机内部

multipass shell vm1

运行后的结果如下所示,可以看到目前虚拟机的一些系统配置信息,以及内存和磁盘的使用情况

安装Docker

snap install docker

docker version(docker -v或docker --version)

运行一个简单的 "Hello World" 程序

docker run hello-world

如何换国内软件源,比如阿里云
sudo sed -i 's|http://archive.ubuntu.com/|http://mirrors.aliyun.com/|g' /etc/apt/sources.list.d/ubuntu.sources

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Title - Artist
0:00