• Multipass,多平台本地轻量级Linux体验!


    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官网:Multipass orchestrates virtual Ubuntu instances

    使用指南 🧭

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

    安装&卸载multipass

    1. # 安装
    2. $ brew install --cask multipass
    3. # 卸载
    4. $ brew uninstall multipass
    5. # 卸载并删除数据
    6. $ brew uninstall --zap multipass

    查看multipass版本

    1. (base) ➜ ~ multipass version
    2. multipass 1.10.1+mac
    3. multipassd 1.10.1+mac

    查找可用镜像

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

    创建实例

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

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

    1. (base) ➜ ~ multipass launch bionic --name d1804
    2. 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
       

    查看实例列表

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

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

    查看具体实例信息

    1. (base) ➜ ~ multipass info d1804
    2. Name: d1804
    3. State: Running
    4. IPv4: 192.168.64.3
    5. Release: Ubuntu 18.04.6 LTS
    6. Image hash: 5269cad5bc26 (Ubuntu 18.04 LTS)
    7. Load: 0.00 0.06 0.06
    8. Disk usage: 1.1G out of 4.7G
    9. Memory usage: 73.5M out of 985.6M
    10. Mounts: --

    关闭&启动实例

    关闭

    1. (base) ➜ ~ multipass stop d1804
    2. (base) ➜ ~ multipass list
    3. Name State IPv4 Image
    4. d1804 Stopped -- Ubuntu 18.04 LTS

    启动

    1. (base) ➜ ~ multipass start d1804
    2. (base) ➜ ~ multipass list
    3. Name State IPv4 Image
    4. d1804 Running 192.168.64.3 Ubuntu 18.04 LTS

    重启

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

    补充:--all参数

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

    使用实例 - 进入shell交互

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

    删除实例 - 可恢复

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

    1. (base) ➜ ~ multipass delete foo
    2. (base) ➜ ~ multipass list
    3. Name State IPv4 Image
    4. d1804 Running 192.168.64.3 Ubuntu 18.04 LTS
    5. foo Deleted -- Not Available

    恢复被删除的实例:

    $ multipass recover foo
    

    删除实例 - 永久删除

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

    1. (base) ➜ ~ multipass delete foo
    2. (base) ➜ ~ multipass purge
    3. (base) ➜ ~ multipass list
    4. Name State IPv4 Image
    5. d1804 Running 192.168.64.3 Ubuntu 18.04 LTS

    或者,一步到位

    (base) ➜  ~ multipass delete --purge foo
    

    外载命令模式

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

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

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

    挂载数据 using mount

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

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

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

    取消共享:

    $ multipass umount d1804
    

    传输文件 using transfer

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

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

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

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


     

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

    1. # mac本地键入
    2. ➜ ~ ls Public
    3. Drop Box
    4. ➜ ~ multipass shell d1804
    5. # 实例键入
    6. ubuntu@d1804:~$ pwd
    7. /home/ubuntu
    8. ubuntu@d1804:~$ touch test.txt
    9. ubuntu@d1804:~$ ls
    10. snap test.txt
    11. # 再切换到mac本地shell
    12. ➜ ~ multipass transfer d1804:/home/ubuntu/test.txt /Users/admin/Public
    13. ➜ ~ ls Public
    14. Drop Box test.txt

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

    总结 💡

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

    对比MultipassDockerWSL & WSL2
    技术领域虚拟机容器技术虚拟机
    背书厂商Canonical (Ubuntu官方)Docker官方微软
    开发语言C++GoC
    开源及
    托管状态
    开源,托管于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实例使用其提供的服务。

     

  • 相关阅读:
    数据库系统工程师------时间周期
    電子郵件IMAP、POP、SMTP 、 應該使用什麼端口
    pv空间回收显示失败
    华为机试真题 Python 实现【最大化控制资源成本】【2022.11 Q4 新题】
    java解决 衣服尺码 Compare T-Shirt Sizes
    设计模式之观察者(发布订阅)模式
    PHP基于原生GD库, 获取图片中文字颜色, 匹配稀有度
    node应用故障定位顶级技巧—动态追踪技术[Dynamic Trace]
    11_跳表(Skip List)
    return 0 和 return true 是什么意思
  • 原文地址:https://blog.csdn.net/sinat_40572875/article/details/128110366