官网:https://multipass.run/

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

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

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

【安装】

下载指定版本的Multipass工具

mac:

brew cask install multipass

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

multipass --version

安装成功后,点击运行,即可打开 Multipass 客户端,这里能够快速的通过 Open Shell 创建和启动一个虚拟机

创建Ubuntu虚拟机

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

multipass find

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

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

multipass launch -n vm01 -c 1 -m 1G -d 10G

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

查看虚拟机列表:

multipass list

外部操作虚拟机:

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

实例:
查看内部所处目录
multipass exec vm01 pwd

查看虚拟机的信息:

multipass info vm01

Name:           primary
State: Running
IPv4: 192.168.54.181
Release: Ubuntu 20.04.3 LTS
Image hash: e1264d4cca6c (Ubuntu 20.04 LTS)
Load: 0.32 1.21 0.88
Disk usage: 1.9G out of 4.7G
Memory usage: 181.7M out of 1012.5M
Mounts: E:/app => /app
UID map: -2:default
GID map: -2:default

进入虚拟机:

multipass shell vm01

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

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

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

  

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

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

apt-get update

apt-get install nginx

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

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

【挂载数据卷】

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

# 挂载格式
multipass mount 宿主机目录 实例名:虚拟机目录 # 创建hello目录
mkdir hello
# 挂载
multipass mount /Users/moxi/hello vm01:/hello

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

注意点:

在windows下默认挂载是禁用的, 需要手动开启

multipass set local.privileged-mounts=true

【卸载数据卷】

#卸载数据卷
multipass umount 容器名

【传输文件】

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

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

例如,将 hello.txt 发送到
multipass transfer hello.txt vm01:/home/ubuntu/

删除和释放实例:

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

容器配置自动化:

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

multipass launch --name ubuntu --cloud-init 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 官方文档

轻量虚拟机之Multipass的更多相关文章

  1. win8.1 cygwin编译java轻量虚拟机avian

    1.背景 昨天在网上看到别人用aauto写本地小程序写的很爽,我觉得如果java的jre能小一点,凭借java庞大的第三方类库写小工具也还算不错的.本人就经常用eclipse+一些commons包写些 ...

  2. 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!

    网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...

  3. Java synchronized实现原理总结和偏量锁、轻量锁、重量锁、自旋锁

    synchronized实现同步的基础:Java中的每一个对象都可以作为锁.具体表现为以下3种形式. 对于普通同步方法,锁是当前实例对象(this). 对于静态同步方法,锁是当前类的Class对象. ...

  4. 写文章 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!

    网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...

  5. 【jvm】07-偏向锁、轻量锁、重量锁到底是啥?

    [jvm]07-偏向锁.轻量锁.重量锁到底是啥? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...

  6. 字节一面:go的协程相比线程,轻量在哪?

    1. 用户态和内核态 Linux整个体系分为用户态和内核态(或者叫用户空间和内核空间), 那内核态究竟是什么呢? 本质上我们所说的内核态, 它是一种特殊的软件程序,特殊在哪? 统筹计算机的硬件资源,例 ...

  7. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器

    最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...

  8. 一种简单,轻量,灵活的C#对象转Json对象的方案

    简单,是因为只有一个类 轻量,是因为整个类代码只有300行 灵活,是因为扩展方式只需要继承重写某个方法即可 补充:修正无法处理可空值类型的bug 首先我将这个类称之为JsonBuilder,我希望它以 ...

  9. 一种简单,轻量,灵活的C#对象转Json对象的方案(续)

    本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...

  10. Dapper.NET——轻量ORM

    Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...

随机推荐

  1. 【YashanDB知识库】开源调度框架Quartz写入Boolean值到YashanDB报错

    问题现象 Quartz 是一个广泛应用于企业级应用中的开源作业调度框架,它主要用于在Java环境中管理和执行任务. 为了任务调度,Quartz的数据模型中使用了大量的布尔值记录任务.流程的各种状态,如 ...

  2. 千万级别mysql 分库分表后表分页查询优化方案初探

    随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大. 以订单表为例,假如每天的订单量在 4 万左右,那么一个月的订单量就是 120 多万,一年就是 1400 多万,随着年数的 ...

  3. git 回退之前某次提交

    git 版本回退,用于误提交或者版本回退 一.回滚到之前的某次版本,且该版本后的提交都不要(用于版本回退) 1).首先查看版本号,用 git log 命令查看要回退的版本对应的commit Id co ...

  4. 巧用PDF转Markdown插件,在扣子(Coze)手搓一个有趣好玩的AI Bot

    近期,TextIn团队开发的PDF转Markdown插件已经上架Coze平台. 短短的时间内,已经有不少朋友愉快地和我们的工具开始玩耍.今天我们抛砖引玉,介(an)绍(li)几种PDF转Markdow ...

  5. Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启

    当应用程序在运行时需要加载图片文件时,如果图片文件位于 bin 目录下,下载新图片会导致应用程序重启,这是因为 Java 应用程序在加载资源时通常会遵循以下机制: 类加载器: Java 应用程序使用类 ...

  6. SqlEs-像使用数据库一样使用Elasticsearch

    SqlEs SqlEs是Elasticsearch的客户端JDBC驱动程序,支持采用sql语法操作Elasticsearch.SqlEs构建在RestHighLevelClient,屏蔽了RestHi ...

  7. 一篇文章彻底讲懂malloc的实现(ptmalloc)

    一.前言 C语言提供了动态内存管理功能, 在C语言中, 程序员可以使用 malloc() 和 free() 函数显式的分配和释放内存. 关于 malloc() 和free() 函数, C语言标准只是规 ...

  8. 使用Git LFS上传大文件步骤

      1.首先我们要先下载git lfs.链接地址 2.我们需要安装git lfs,但是必须安装到git/bin下面.就是你安装git的时候,那个路径.可以看我的git安装路径: 3.我们可以使用以下步 ...

  9. .NetCore 目录浏览 和 静态文件

    1.  静态文件 包:microsoft.aspdotnet.staticfiles app.UseStaticFiles()  会默认找到 wwwroot文件夹 // 匹配到指定条件然后执行中间件 ...

  10. 从url地址获取主机名

    function getHost(url) { var host = "null"; if(typeof url == "undefined"|| null = ...