开始使用

在使用 Multipass 之前 ,首先需要安装 Multipass 工具,可以打开官网进行下载

macOS可以直接命令行下载安装:

brew cask install multipass

下载安装成功后, 执行以下命令可以查看当前软件版本:

multipass --version

创建Ubuntu虚拟机

首先,通过以下指令查看可供下载的 Ubuntu 镜像

multipass find

运行成功后,可以看到下面的这些镜像列表,包含各种版本的

Image                       Aliases           Version          Description
18.04                       bionic            20220104         Ubuntu 18.04 LTS
20.04                       focal,lts         20220104         Ubuntu 20.04 LTS
21.04                       hirsute           20220106         Ubuntu 21.04
21.10                       impish            20220106         Ubuntu 21.10
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
minikube                                      latest           minikube is local Kubernetes

下载最新版的 Ubuntu 镜像并运行,初次创建时需要下载 Ubuntu 镜像,网络畅通的情况下,稍等片刻即可。

multipass launch -n vm01 -c 1 -m 2G -d 5G

自定义配置创建可以参考如下方式:

-n, --name: 名称
-c, --cpus: cpu核心数, 默认: 1
-m, --mem: 内存大小, 默认: 1G
-d, --disk: 硬盘大小, 默认: 5G

操作虚拟机

查看虚拟机列表

虚拟机创建完成后,可以使用 multipass list 命令进行查看虚拟机列表

multipass list
Name                    State             IPv4             Image
primary                 Running           192.168.64.2     Ubuntu 20.04 LTS
vm01                    Running           192.168.64.3     Ubuntu 20.04 LTS

可以看到目前正在运行一台 Ubuntu 20.04 版本的虚拟机,并且对应的 IP 地址为 192.168.64.2

外部操作虚拟机

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

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

# multipass exec vm01 pwd
/home/ubuntu

查看虚拟机信息

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

multipass info vm01
Name:           vm01
State:          Running
IPv4:           192.168.64.3
Release:        Ubuntu 20.04.3 LTS
Image hash:     41e1dfe34038 (Ubuntu 20.04 LTS)
Load:           0.01 0.00 0.00
Disk usage:     1.2G out of 4.7G
Memory usage:   133.5M out of 1.9G
Mounts:         --

进入虚拟机

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

shell
multipass shell vm01

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

20220111截屏2022011114.10.58.png

进入虚拟机内部同时会运行一个新的 Ubuntu 系统,此时便进入到了Ubuntu 环境中, 在里面可以执行相关的 linux 指令

当然如果不想进入系统内部,也可以通过上述提到的 multipass exce 命令,来操作 Ubuntu 系统

首先执行下面命令,给系统设置一个 root 密码,设置好密码后,使用 su root 切换到 root 用户

# 设置密码
sudo passwd
# 切换 root
su root

ubuntu 是使用 apt-get 来进行包管理的,首先更新一下 apt-get ,然后安装 nginx

# 更新apt
apt-get update
# 安装 nginx
apt-get install nginx

安装好 nginx 后,可以到 /etc/nginx 目录即可看到刚刚的 nginx 配置信息

root@vm01:/home/ubuntu# cd /etc/nginx/
root@vm01:/etc/nginx# ls
conf.d        fastcgi_params  koi-win     modules-available  nginx.conf    scgi_params      sites-enabled  uwsgi_params
fastcgi.conf  koi-utf         mime.types  modules-enabled    proxy_params  sites-available  snippets       win-utf

下面我们可以测试一下,nginx 是否安装成功,在浏览器,输入虚拟机的 ip 地址 192.168.64.3

20220111截屏2022011114.17.22.png

nginx安装成功可以看出,目前 nginx 已经成功运行了

挂载数据卷

multipass 还提供和 Docker 一样的挂载数据卷的功能,能够与外部宿主机的文件保持同步。

# 挂载格式
multipass mount 宿主机目录  实例名:虚拟机目录

下面,我在用户的目录下,创建一个** hello **目录

# 创建hello目录
mkdir hello
# 挂载
multipass mount /Users/jmal/hello vm01:/hello

挂载完成后,我们回到实例 vm01 中,可以看出多了一个** hello **文件夹,说明已经成功挂载~

20220111截屏2022011114.21.35.png

挂载成功因此,以后在 vm01hello 文件夹 中创建的文件,都会在的宿主机的 hello 文件夹 同步显示

卸载数据卷

如果以后不需要用到挂载了,可以使用 unmount 命令卸载

# 卸载指定数据卷
multipass umount <容器名>[:<path>]
# 卸载该容器的所有数据卷
multipass umount <容器名>

传输文件

除了使用上述的 mount 挂载卷的方式实现文件的交互,同时还可以通过 transfer 命令,将宿主机的文件,发送到虚拟机内部

multipass transfer 主机文件 容器名:容器目录/主机文件

例如,将 known_hosts 发送到

multipass transfer known_hosts vm01:/home/ubuntu/known_hosts

删除和释放实例

使用下面的命令,可以开启、停止、删除和释放实例

# 启动实例
multipass start vm01
# 停止实例
multipass stop vm01
# 删除实例(删除后,还会存在)
multipass delete vm01
# 释放实例(彻底删除)
multipass purge

容器配置自动化

为了保持开发环境和线上环境一致性 同时节省部署时间 multipass 给我们提供了 --cloud-init 选项进行容器启动初始化配置:

multipass launch --name vm1 --cloud-init config/multipass-config.yaml

上面** config.yaml 则是容器的初始化配置文件,例如,我们想在初始化容器的时候,自动下载安装 Node.js ,内容如下:

#cloud-config
runcmd:
  - curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
  - sudo apt-get install -y nodejs

runcmd可以指定容器 首次启动 时运行的命令

凡是用户自定义的cloud-init的配置文件,必须以#cloud-config开头,这是cloud-init识别它的方式。

yaml配置文件可以参考下面的文章

https://cloudinit.readthedocs.io/en/latest/topics/examples.html?highlight=lock-passwd#including-users-and-groups

更多关于 multipass 的高阶的技巧,欢迎访问 multipass 官方文档

官方文档

Github

如何安装桌面?

sudo apt-get update

这步完成后,使用以下命令安装桌面和RDP客户软件:

sudo apt-get install ubuntu-desktop xrdp -y

安装应该需要几分钟。完成后,使用以下命令创建一个新用户:

sudo adduser USERNAME

其中USERNAME是您登录时使用的用户名

最后,使用以下命令为新用户赋予sudo访问权限:

sudo usermod -aG sudo USERNAME

其中USERNAME是您登录时使用的用户名

如何访问桌面?

要访问新安装的桌面,您首先得发现虚拟机的IP地址。为此,留在虚拟机shell中,执行该命令:

ip a

您应该会看到一个IP地址,比如10.171.55.156,这将是虚拟机的地址。

要访问桌面,您将使用RDP客户软件(比如Linux上的Remmina)。Remmina窗口打开后(图 A),输入虚拟机IP地址,并按键盘上的回车键。

然后您会看到登录屏幕

从Multipass虚拟机shell 中输入您所创建的新用户名/密码组合,然后会看到Ubuntu桌面