简介

最近在浏览Ubuntu官网的时候,发现了一款叫Multipass的东西。

它可以快速在电脑上搭建一个轻量级的虚拟机,并且相比于 Vmware 或 VirtualBox 更加轻量,只需一行命令快速创建 Ubuntu 虚拟机。

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

同时,Multipass 提供了一个命令行界面来启动和管理 Linux 实例。下载一个全新的镜像需要几秒钟的时间,并且在几分钟内就可以启动并运行 VM。(直呼好家伙,大大降低的我们安装虚拟机的成本了)

安装

MacOS下可直接使用brew进行安装。

brew install --cask multipass

这是我见过的史上最快的创建并启动一个linux虚拟机的方法,安装完成后,启动multipass, 将在顶部显示multipass的图标,点击 图标 -> open shell

等待一会,multipass就帮你下载安装好了一个虚拟机,并进入了该虚拟机的shell界面。 背后,multipass做了如下事情:

  • 创建了一个叫做primary的虚拟机, 默认配置是:1GB内存, 5GB磁盘, 1 CPU;
  • 安装最新的Ubuntu LTS release;
  • mount宿主机$HOME目录到虚拟机内的~/HOME/目录;
  • 进入虚拟机的shell, 你将看到命令提示符:ubuntu@primary:~$

上面的操作,相当于在宿主机执行如下命令:

$ multipass launch –name primary 
$ multipass shell

multipass shell命令后不跟虚拟机名字的话,默认使用primary这个名字。

使用

  • 查看可供下载的 Ubuntu 镜像
$ multipass find
  • 创建并启动一个虚拟机(使用lts镜像)
$ multipass launch lts --name ltsInstance --memory 2G --disk 10G --cpus 2
  • 列出所有虚拟机实例
$ multipass list
  • 查看虚拟机信息(IP,资源使用情况等)
$ multipass info ltsInstance
  • 不进入虚拟机执行命令
$ multipass exec ltsInstance -- lsb_release -a
$ multipass exec ltsInstance -- ls
  • 进入虚拟机
$ multipass shell ltsInstance

此时便进入到了Ubuntu 环境中, 在里面可以执行相关的 linux 指令, 例如,给系统设置一个 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 配置信息
cd /etc/nginx/
  • 挂载数据卷
# 挂载格式
multipass mount 宿主机目录  实例名:虚拟机目录
#卸载数据卷
multipass umount 实例名[:<path>]
  • 传输文件
multipass transfer 宿主机文件 实例名:虚拟机目录
  • 删除和释放实例
# 启动实例
multipass start ltsInstance
# 停止实例
multipass stop ltsInstance

# 删除实例(删除后,还会存在)
$ multipass delete ltsInstance 
# 恢复删除的实例
$ multipass recover ltsInstance 
# 释放实例(彻底删除)
$ multipass purge ltsInstance 
  • 卸载multipass
$ brew uninstall multipass
# or
$ brew uninstall --zap multipass # to destroy all data, too

multipass + cloud-init

Cloud-init is the standard for customizing cloud instances,

$ multipass launch -n my-test-vm --cloud-init cloud-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

凡是用户自定义的cloud-init的配置文件,必须以#cloud-config开头,这是cloud-init识别它的方式。 runcmd 可以指定容器 首次启动 时运行的命令

更多的配置方法可参考cloud-init文档