Multipass介绍

Multipass 是由Ubuntu官方提供,在Linux,MacOS和Windows上快速生成 Ubuntu虚拟机 的工具。它提供了一个简单但功能强大的CLI,可让我们在本地快速进入Ubuntu系统环境并使用Linux命令,亦可以在本地计算机创建自己的迷你型云服务器。总的来说就是在本地创建Ubuntu虚拟机,可以获得云端Ubuntu服务器般的体验。

Multipass在Windows上使用Hyper-V,在MacOS上使用Hyperkit,在Linux上使用LXD,以达到用最小的开销和最快的启动时间来进行虚拟机的创建,进而在不同平台提供统一的 Linux 开发环境体验。

Multipass 提供了一个命令行界面来启动和管理 Linux 实例,根据镜像创建实例,在本地已有实例的情况下,实例的启动仅需要数十秒的时间。

无论是Windows,还是MacOS、Linux,都可以在本地通过Multipass创建一个类服务器般体验的Linux系统,我们可以在Ubuntu实例系统中安装nginx、redis、kafka、k8s等软件,进而在本地体验、学习、开发、验证Linux服务器的相关内容。

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

使用指南

以下内容在两台Mac上实践,各例中的VM实例参数略有不同。

安装&卸载multipass

# 安装
$ brew install --cask multipass # 卸载
$ brew uninstall multipass # 卸载并删除数据
$ brew uninstall --zap multipass

查看multipass版本

(base) ➜  ~ multipass version
multipass 1.10.1+mac
multipassd 1.10.1+mac

查找可用镜像

(base) ➜  ~ multipass find
Image Aliases Version Description
snapcraft:core18 18.04 20201111 Snapcraft builder for Core 18
snapcraft:core20 20.04 20210921 Snapcraft builder for Core 20
snapcraft:core22 22.04 20220426 Snapcraft builder for Core 22
18.04 bionic 20221014 Ubuntu 18.04 LTS
... ... ...

创建实例

️ 可以指定镜像别名 和 实例别名

根据上一步multipass find的结果,我们使用18.04版本的镜像,其别名为bionic,创建后的实例我们命名为d1804

(base) ➜  ~ multipass launch bionic --name d1804
Launched: d1804

不指定镜像会随机选择镜像创建。同样,不指定实例别名也会随机命名。

实例创建后默认启动,即running状态。

创建实例时可以附加的参数如下:

(base) ➜  ~ multipass launch bionic --name d1804 --cpus 4 --disk 20G --mem 8G
  • -n, --name:名称
  • -c, --cpus:cpu核心数, 默认: 1
  • -m, --mem:内存大小, 默认: 1G
  • -d, --disk::硬盘大小, 默认: 5G

查看实例列表

(base) ➜  ~ multipass list
Name State IPv4 Image
d1804 Running 192.168.64.3 Ubuntu 18.04 LTS

列表中会展示各实例的本地局域网IP地址,可以把该地址当作远程服务器的地址,进而实现本地VM实例模拟远程服务器的结果,同时可以在VM实例中安装MySQL、Redis等软件,当作本地开发的云端服务。

查看具体实例信息

(base) ➜  ~ multipass info d1804
Name: d1804
State: Running
IPv4: 192.168.64.3
Release: Ubuntu 18.04.6 LTS
Image hash: 5269cad5bc26 (Ubuntu 18.04 LTS)
Load: 0.00 0.06 0.06
Disk usage: 1.1G out of 4.7G
Memory usage: 73.5M out of 985.6M
Mounts: --

关闭&启动实例

关闭

(base) ➜  ~ multipass stop d1804
(base) ➜ ~ multipass list
Name State IPv4 Image
d1804 Stopped -- Ubuntu 18.04 LTS

启动

(base) ➜  ~ multipass start d1804
(base) ➜ ~ multipass list
Name State IPv4 Image
d1804 Running 192.168.64.3 Ubuntu 18.04 LTS

重启

(base) ➜  ~ multipass restart d1804
Restarting d1804 ...

补充:--all参数

(base) ➜  ~ multipass start --all  # 启动所有实例
(base) ➜ ~ multipass stop --all # 关闭所有实例

使用实例 - 进入shell交互

(base) ➜  ~ multipass shell d1804
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-194-generic x86_64) * Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage System information as of Sat Nov 5 18:56:38 CST 2022
... ...
... ...

删除实例 - 可恢复

此时列表还显示被删除的实例

(base) ➜  ~ multipass delete foo
(base) ➜ ~ multipass list
Name State IPv4 Image
d1804 Running 192.168.64.3 Ubuntu 18.04 LTS
foo Deleted -- Not Available

恢复被删除的实例:

$ multipass recover foo

删除实例 - 永久删除

关键命令:multipass purge [instances...],采用纯净模式删除的实例不可恢复。

(base) ➜  ~ multipass delete foo
(base) ➜ ~ multipass purge
(base) ➜ ~ multipass list
Name State IPv4 Image
d1804 Running 192.168.64.3 Ubuntu 18.04 LTS

或者,一步到位

(base) ➜  ~ multipass delete --purge foo

外载命令模式

不需要进入实例的shell交互环境就可以执行实例内部命令,但需要目标实例处于running状态,如果没有处于running状态,会先启动再执行相关命令。

(base) ➜  ~ multipass exec d1804 -- pwd
/home/ubuntu

️ 实例别名后的 -- 后面要跟空格,之后再输入命令

挂载数据 using mount

mount命令是官方推荐的文件共享方式。

➜  ls
Photos Library.photoslibrary ishot u=60941161,499456713&fm=26&fmt=auto&gp=0.png
bizhi mail_img
img pokerking-full-logo.png ➜ multipass mount bizhi d1804 ➜ multipass info d1804
Name: d1804
State: Running
IPv4: 192.168.64.2
Release: Ubuntu 18.04.6 LTS
Image hash: 5269cad5bc26 (Ubuntu 18.04 LTS)
Load: 0.06 0.09 0.03
Disk usage: 1.2G out of 9.5G
Memory usage: 119.4M out of 985.6M
Mounts: /Users/admin/Pictures/bizhi => /Users/admin/Pictures/bizhi
UID map: 501:default
GID map: 20:default

可以看出,根据本地bizhi文件夹的路径,multipass在实例里面建立了同名路径的映射,此后双方任意方对该文件夹进行变动,都会同步至另一方。

取消共享:

$ multipass umount d1804

传输文件 using transfer

transfer的作用就是从一端复制文件到另一端,可以是本地复制到一个实例里,也可以是从一个实例复制到另一个实例里,也可以是从实例复制到本地。

️ 同步的数据,后续变动双方互不影响。

从宿主机传送到Multipass实例中:

# mac本地键入
➜ ls
pokerking-full-logo.png ➜ multipass transfer pokerking-full-logo.png d1804:/tmp ➜ multipass shell d1804 # multipass实例中键入
ubuntu@d1804:~$ ls /tmp/

从Multipass实例传送到宿主机中:

# mac本地键入
➜ ~ ls Public
Drop Box ➜ ~ multipass shell d1804 # 实例键入
ubuntu@d1804:~$ pwd
/home/ubuntu ubuntu@d1804:~$ touch test.txt ubuntu@d1804:~$ ls
snap test.txt # 再切换到mac本地shell
➜ ~ multipass transfer d1804:/home/ubuntu/test.txt /Users/admin/Public ➜ ~ ls Public
Drop Box test.txt

以上命令并不是Multipass支持的所有命令,但足够覆盖日常使用的80%,更多内容可以去文章顶部的Multipass官网自行浏览!

总结

写到这里,相信有部分人觉得Multipass的用法和Docker非常相似,也有部分Windows用户认为这和当前微软力推的WSL (Windows Subsystem for Linux) 的功能高度重叠。具体请看以下对比。

对比 Multipass Docker WSL & WSL2
技术领域 虚拟机 容器技术 虚拟机
背书厂商 Canonical (Ubuntu官方) Docker官方 微软
开发语言 C++ Go C
开源及
托管状态
开源,托管于GitHub
点击直达canonical/multipass
开源,托管于GitHub
点击直达Docker
开源,托管于GitHub
点击直达microsoft/WSL2
适配平台 Linux & MacOS & Windows,跨平台能力好 Linux适配较好,MacOS & Windows适配较弱 Windows无缝集成
可选环境 仅Ubuntu官方镜像 各种Linux版本,
选择灵活性程度高
Linux kernel稳定版 + 部分发行版
适用场景 本地开发&验证&学习玩耍 可在工业级生产场景中
实际应用
本地开发&验证&学习玩耍

补充

  1. 可以在MacOS和Windows上安装Multipass,然后在Multipass的VM实例中安装Docker,使得非Linux系统的宿主机使用稳定的容器技术。(适用于个人学习玩耍,生产环境莫开玩笑!)
  2. Multipass的出现更像是Ubuntu为了和微软的WSL一争高下(个人猜测),可以将Multipass和WSL放在同等地位,Docker则是在Linux的基础上,具备前两者所没有的特性,重点提供不同于Multipass/WSL的服务。
  3. 针对软件开发人员,Windows的环境配置一向杂乱无章,有了Multipass,我们可以在Multipass生成的Linux实例环境中配置各种服务,如MySQL、Redis等,宿主机开发环境通过直连Multipass实例使用其提供的服务。

Multipass,本地轻量级Linux体验!的更多相关文章

  1. 轻量级linux CRUX安装笔记

    感谢hrdd的分享,原文出处:http://wxdhrdd.blog.163.com/blog/static/120500564200952592240867/ 以下是对原文进行补充 crux的安装: ...

  2. 7款适用老旧设备并对初学者非常友好的轻量级Linux发行版

    我们由从 7 到 1 的顺序向大家介绍. 7. Linux Lite 正如其名,Linux Lite 是 Linux 发行版的一个轻量级版本,用户并不需要强大的硬件就可以将它跑起来,而且其使用非常简单 ...

  3. 在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹)

    在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹) 1 列出所有需要copy的sh文件 -bash-4.1$ ll /mysqllog/osw/*.sh ...

  4. Linux体验之旅(一)——制作U启,安装rhel-server-6.3

    U启制作: 双击UltraISO: 点击文件→打开: 选择rhel-server6.3 点击启动→选择写入硬盘映像 最后选择格式化优盘→写入→完毕 注意:启动盘制作完毕后一定记得将rhel-serve ...

  5. Alpine Linux 3.9.2 发布,轻量级 Linux 发行版

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Alpine Linux 3.9.2 已发布,Alpine Linux 是一款面向安全的轻量级 Linux 发行版,体积十分的小. Alpi ...

  6. Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

    转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-d ...

  7. coreOS+Docker新一代企业轻量级Linux

    CoreOS官网主页使用一句话概括其理 念:“A new way to think about servers”,以及紧接着的“CoreOS is Linux for massive server d ...

  8. 采用xshell链路本地虚拟机Linux

    昨天想安装在自己的机器看Linux.而使用xshell通路.但是这花了很长的时间,于xshell结束所有的提示"Could not connect to '192.168.54.100' ( ...

  9. 使用node连接MongoDB数据 综本地及linux服务器记

    gitee地址 启动mongo D:\MongoDB> ./bin/mongod --dbpath ./data/db MongoDB 提供了简单的 HTTP 用户界面. 如果你想启用该功能,需 ...

  10. 本地显示Linux服务器的GUI程序

    如果我们UI自动化脚本跑在 Linux 服务器环境上,这个时候我们是看不到界面的,如果不使用浏览器的无头模式,这个时候我们的程序就跑不起来了,如何在服务器环境不使用浏览器的无头模式下进行UI测试呢,我 ...

随机推荐

  1. .NET 7 RC1 正式发布

    从年初2 月份发布第一个预览版,经历7个预览版后,Microsoft 西雅图时间9月14日发布了 .NET 7 RC 1:https://devblogs.microsoft.com/dotnet/a ...

  2. 使用prometheus + granafa 监控mysql主从

    若主从同步数据库未同步默认的mysql表,则也需要在从库上创建mysql用户mysqld_exporter用来收集监控数据 mysqld_exporter安装部署 这里采取的是mysqld_expor ...

  3. 在k8s集群中安装traefik,并结合kuboard界面使用

    安装traefik 参考步骤:https://blog.51cto.com/u_13760351/2764008?xiangguantuijian&01 修改好的四个yaml文件下载地址:ht ...

  4. 通过nginx转发rabbitmq访问手动添加队列的时候报错:Management API returned status code 405

    原因: 正常访问该地址:https://xxx.xxx.com/rabbitmq/ 时能正常跳转,但是 rabbitmq management 的 API url 出现了 %2f 字符,这些字符会在经 ...

  5. 几篇关于MySQL数据同步到Elasticsearch的文章---第二篇:canal 实现Mysql到Elasticsearch实时增量同步

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484377&idx=1&sn=199bc88 ...

  6. 使用sed在源文件上直接替换某一行的内容,只替换第一次找到的那行

    sed -i 's/^mysqld_pid_file_path=.*$/mysqld_pid_file_path=\/data\/mysql\/run\/mysqld.pid/' /etc/init. ...

  7. ELK 性能优化实践

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI5MTU1MzM3MQ==&mid=2247489814&idx=1&sn=6916f8b7 ...

  8. 使用Receiver接收告警信息

    告警接收器可以通过以下形式进行配置: receivers: - <receiver> ... 每一个receiver具有一个全局唯一的名称,并且对应一个或者多个通知方式: name: &l ...

  9. 线段树学习笔记(基础&进阶)(一) | P3372 【模板】线段树 1 题解

    什么是线段树 线段树是一棵二叉树,每个结点存储需维护的信息,一般用于处理区间最值.区间和等问题. 线段树的用处 对编号连续的一些点进行修改或者统计操作,修改和统计的复杂度都是 O(log n). 基础 ...

  10. SpringBoot课程学习(三)

    一.YAML格式的基本语法 (1)格式: 大小写敏感 数据值前边必须有空格,作为分隔符 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层 ...