轻量虚拟机之Multipass
它可以快速在电脑上快速搭建一个轻量级的虚拟机,并且相比于 Vmware 更加轻量,只需一行命令快速创建 Ubuntu 虚拟机。
Multipass 是一个轻量虚拟机管理器,是由 Ubuntu 运营公司 Canonical 所推出的开源项目。运行环境支持 Linux、Windows、macOS。在不同的操作系统上,使用的是不同的虚拟化技术。在 Linux 上使用的是 KVM、Window 上使用 Hyper-V、macOS 中使用 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配置文件:
更多关于 multipass 的高阶的技巧,欢迎访问 multipass 官方文档
轻量虚拟机之Multipass的更多相关文章
- win8.1 cygwin编译java轻量虚拟机avian
1.背景 昨天在网上看到别人用aauto写本地小程序写的很爽,我觉得如果java的jre能小一点,凭借java庞大的第三方类库写小工具也还算不错的.本人就经常用eclipse+一些commons包写些 ...
- 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!
网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...
- Java synchronized实现原理总结和偏量锁、轻量锁、重量锁、自旋锁
synchronized实现同步的基础:Java中的每一个对象都可以作为锁.具体表现为以下3种形式. 对于普通同步方法,锁是当前实例对象(this). 对于静态同步方法,锁是当前类的Class对象. ...
- 写文章 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!
网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...
- 【jvm】07-偏向锁、轻量锁、重量锁到底是啥?
[jvm]07-偏向锁.轻量锁.重量锁到底是啥? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...
- 字节一面:go的协程相比线程,轻量在哪?
1. 用户态和内核态 Linux整个体系分为用户态和内核态(或者叫用户空间和内核空间), 那内核态究竟是什么呢? 本质上我们所说的内核态, 它是一种特殊的软件程序,特殊在哪? 统筹计算机的硬件资源,例 ...
- Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器
最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...
- 一种简单,轻量,灵活的C#对象转Json对象的方案
简单,是因为只有一个类 轻量,是因为整个类代码只有300行 灵活,是因为扩展方式只需要继承重写某个方法即可 补充:修正无法处理可空值类型的bug 首先我将这个类称之为JsonBuilder,我希望它以 ...
- 一种简单,轻量,灵活的C#对象转Json对象的方案(续)
本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...
- Dapper.NET——轻量ORM
Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...
随机推荐
- DOM – IntersectionObserver
介绍 IntersectionObserver 的作用是监听某个元素是否出现在框内 (比如 viewport). 它可以实现 lazy load image, 一开始图片是没有加载的, 当图片出现在 ...
- POJ-3176 Cow Bowling(基础dp)
The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...
- SpringMVC —— SpringMVC简介
SpringMVC SpringMVC技术 与 Servlet技术功能等同,均属于web层开发技术 是一种基于java实现MVC模型的轻量级Web框架 SpringMVC 入门案例 ...
- LeetCode 564. Find the Closest Palindrome (构造)
题意: 给一个数字n 求离n最近(且不等)的回文串 存在多个答案返回最小的 首先很容易想到 将数字分为两段,如 12345 -> 123/45,然后将后半段根据前面的进行镜像重置 123/45 ...
- ShardingSphere系列(二)——ShardingSphere-JDBC绑定表
完整的项目示例地址:https://gitee.com/learnhow/shardingsphere/tree/v1.1/jdbc 紧接上一篇文章,这次我们介绍绑定表的概念. 绑定表指分片规则一致的 ...
- Android Linux EAS优化-schedtune
SchedTune SchedTune是一项与CPU调频相关的性能提升技术,它实现为一个cgroup控制器. 这个控制器提供了一个名称为schedtune.boost的配置参数,运行时系统可以使用它来 ...
- docker-compose -- 创建 redis && mysql
version: '3' services: nest-admin-web: image: buqiyuan/vue3-antdv-admin:stable container_name: nest- ...
- C#的函数使用 和参数修饰符 out ref params
// 函数和方法 // 函数好比对象的动作行为 在定义函数的时候,职责(作用/功能)越单一越好 满足高内聚 低耦合的开发思路 // 变量的命名规则 小驼峰 // 函数的命名规则 大驼峰 动词开头 // ...
- 简化版本的redis配置文件
# bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1 protected-mode no port 6379 tcp-b ...
- ⼯作中有做过数据处理吗? tree 组件 根据 pid 寻找父节点
主要是在组件和后端返回的数据之间,或者组件产⽣的数据和需要提交给后端的数据之间,有可能会出 现结构对不上,这个时候可能会处理⼀下,举个例⼦,⽐如说我们常⽤的tree型组件要求必须是嵌套的 tree型数 ...