見出し画像

Multipassの紹介です。

はじめに

ハローワールド!マイクです。
 Dockerはオープンなプラットフォームです。Dockerオブジェクトと呼ばれるイメージ、コンテナ、ネットワーク、ボリュームなどで構成され、これらを操作する事でアプリケーションを開発、配布、実行することが出来ます。
 前回はDocker Swarm modeを使ってサーバ1台にコンテナを3つ起動してみました。次はサーバ3台にコンテナをそれぞれ1つずつ起動したいと思っています。そのためには何かしらVMを使うのが、お手軽だと思います。今回はVM環境を作成できるMultipassを紹介したいと思います。

使ったもの

 今回の環境を下記に示しておきます。

  • Multipass 1.14.1

  • Ubuntu 22.04.4 LTS (ホストOS)

  • Ubuntu 24.04.1 LTS  (ゲストOS)

Multipassとはなんでしょう?

 流行りのChatGPTくんに聞いてみました。

CanonicalのMultipass(仮想マシン管理ツール)
Multipassは、Ubuntuを中心とした仮想マシンを簡単に作成・管理するためのツールです。Canonicalが提供しており、以下の特徴があります:
軽量な仮想化環境: クラウド開発やテストのために、ローカルマシン上で簡単に仮想マシンを起動できます。
シンプルなコマンドライン操作: コマンド一つで仮想マシンの作成、削除、開始、停止が可能。
マルチプラットフォーム: Windows、macOS、Linuxで利用可能。
クラウドへの接続に類似した体験: 開発者がローカルでクラウドに近い環境を再現するのに適しています。

Windows, macOS, Linux上でUbuntuを簡単に実行できるツールです。私はUbuntu上でUbuntuを実行しています。色々インストールして、ホストのUbuntuがグチャグチャにならないようにしています。

インストールとアンインストール方法

 snapを使ってインスタンスとアンインストールを行います。

snap install multipass
snap remove multipass

こんな感じの管理GUIもインストールされました。インスタンスの作成、起動、一時停止、停止、削除ができるみたいです。

機能の紹介を少し

1.バージョンの確認方法

$ multipass version
multipass   1.14.1
multipassd  1.14.1

2.インスタンスの状態を確認する方法

$ multipass list
Name                    State             IPv4             Image
omnipotent-bison        Stopped           --               Ubuntu 24.04 LTS

3.インスタンスの作成方法

作成するときに、名前を my-first-vm、CPUの数を2つ、メモリを2G、ディスクを10Gと指定しています。
下記の例では、--memではなく--memoryを使ってくださいと警告が出てしまいました。
作成するときに --name primaryとしておくと、multipass startやmultipass shellなどのコマンドを使う時にインスタンスの名前を指定しない済みます。

$ multipass launch -n my-first-vm --cpus 2 --mem 2G --disk 10G
Warning: the "--mem" long option is deprecated in favour of "--memory". Please update any scripts, etc.
Launched: my-first-vm
[mike@ubuntu ~]$ multipass list
Name                    State             IPv4             Image
my-first-vm             Running           10.179.162.203   Ubuntu 24.04 LTS
omnipotent-bison        Stopped           --               Ubuntu 24.04 LTS

4.ファイルの転送

ホストにあるtest.txtをomnipotent-bisonインスタンスの/home/ubuntu/mytestdirディレクトリのファイルをコピーしました。
multipass transfer 転送元のパスとファイル名 転送先のパスとファイル名
ホスト→インスタンス、インスタンス→ホストの両方できます。

$ multipass transfer test.txt omnipotent-bison:/home/ubuntu/mytestdir

5.インスタンスへのログイン

omnipotent-bisonというインスタンスにログインしました。
ログアウトはexitと打てば抜けられます。

$ multipass shell omnipotent-bison 
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-49-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Fri Dec  6 11:06:58 JST 2024

  System load:  0.08              Processes:             122
  Usage of /:   62.9% of 3.80GB   Users logged in:       0
  Memory usage: 30%               IPv4 address for ens3: 10.179.162.118
  Swap usage:   0%

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


Last login: Thu Dec  5 19:36:28 2024 from 10.179.162.1
ubuntu@omnipotent-bison:~$ 

6.インスタンス内でコマンドを実行して結果をホストで表示する

ホストで以下のコマンドを実行してみました。インスタンスomnipotent-bison上でls /home/ubuntu/mytestdirコマンドを実行して、結果をホスト上で表示しています。

$ multipass exec omnipotent-bison -- ls /home/ubuntu/mytestdir
test.txt

7.Blueprintを使ってインスタンスを作成

BlueprintはYAMLファイルを使ってどういうインスタンスを作成するのか定義したファイルです。
クラウドにあるBlueprintを探すには以下のコマンドで探せます。

$ multipass find --only-blueprints
Blueprint                   Aliases           Version          Description
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
charm-dev                                     latest           A development and testing environment for charmers
docker                                        0.4              A Docker environment with Portainer and related tools
jellyfin                                      latest           Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
minikube                                      latest           minikube is local Kubernetes
ros2-humble                                   0.1              A development and testing environment for ROS 2 Humble.
ros2-jazzy                                    0.1              A development and testing environment for ROS 2 Jazzy.

インスタンスを作成するときは、Blueprint名を指定して作成します。

$ multipass launch docker

自分で作ったYAMLファイルでインスタンスを作成する事もできるらいしいのですが、まだやった事はありません。すみません。
参考までにコマンドはこちら。
multipass launch --cloud-init blueprint.yaml
※YAMLの構文チェック
 Yamlint bluprint.yaml

8.バックアップの取り方

スナップショットという形でVMのバックアップを取る事ができます。インスタンスを停止した状態で実施する事が推奨されています。
これを別の環境に移動して、スナップショットから環境を作れるかどうかわかりません。ChatGPT君に聞いたら推奨されていないとの事でした。公式ドキュメントにも何も書いてない気がします。

$ multipass snapshot my-first-vm
Snapshot taken: my-first-vm.snapshot1

スナップショットの確認方法はこんな感じです。2回スナップショットを取ったので2つあります。

$ multipass list --snapshots
Instance      Snapshot    Parent      Comment
my-first-vm   snapshot1   --          --
my-first-vm   snapshot2   snapshot1   --
$ ls /var/snap/multipass/common/data/multipassd/vault/instances/my-first-vm/
0001.snapshot.json  0002.snapshot.json  cloud-init-config.iso  snapshot-count  snapshot-head  ubuntu-24.04-server-cloudimg-amd64.img

スナップショットからVMを復元する方法。インスタンスを完全に削除した場合は復元できなさそうです。なぜなら、インスタンス名のディレクトリのしたにスナップショットファイルが作成されているからです。

$ multipass restore my-first-vm.snapshot1
Do you want to take a snapshot of my-first-vm before discarding its current state? (Yes/no): n
Snapshot restored: my-first-vm.snapshot1

スナップショットの削除です。完全に削除されてしまうようですね。

$ multipass list --snapshots
Instance      Snapshot    Parent      Comment
my-first-vm   snapshot1   --          --
my-first-vm   snapshot2   snapshot1   --

$ multipass delete my-first-vm.snapshot2
Snapshots can only be purged (after deletion, they cannot be recovered). Are you sure you want to continue? (Yes/no): y
$ multipass list --snapshots
Instance      Snapshot    Parent   Comment
my-first-vm   snapshot1   --       --

9.ホストのディレクトリとインスタンスのディレクトリをマウントとアンマウント

下の例では、ホスト側のomnipotent_bisonディレクトリとゲスト側の/home/ubuntu/mytestdirをマウントさせました。typeをclassicに指定する事でSSH File System(SSHFS)を使うようになります。nativeを指定する方法もあるようですが、使える条件があるみたいです。

$ multipass mount --type=classic ./omnipotent_bison omnipotent-bison:/home/ubuntu/mytestdir

アンマウントはディレクトリを指定すると、そのマウントだけなくなります。ディレクトリを指定しなければ、全てのマウントがなくなるようです。

multipass unmount omnipotent-bison

10.インスタンスの停止

$ multipass stop my-first-vm 
$ multipass list
Name                    State             IPv4             Image
my-first-vm             Stopped           --               Ubuntu 24.04 LTS

11.インスタンスの削除

deleteとpurgeがあります。deleteはrecoverで元に戻せますがpurgeは完全に削除されます。purgeはdeleteされたインスタンス全てを削除します。

$ multipass list
Name                    State             IPv4             Image
my-first-vm             Stopped           --               Ubuntu 24.04 LTS
omnipotent-bison        Stopped           --               Ubuntu 24.04 LTS

$ multipass delete my-first-vm
$ multipass list
Name                    State             IPv4             Image
my-first-vm             Deleted           --               Ubuntu 24.04 LTS
omnipotent-bison        Stopped           --               Ubuntu 24.04 LTS

$ multipass recover my-first-vm 
$ multipass list
Name                    State             IPv4             Image
my-first-vm             Stopped           --               Ubuntu 24.04 LTS
omnipotent-bison        Stopped           --               Ubuntu 24.04 LTS

$ multipass delete my-first-vm
$ multipass purge
$ multipass list
Name                    State             IPv4             Image
omnipotent-bison        Stopped           --               Ubuntu 24.04 LTS

最後に

 今回はmultipassの紹介でした。ゲストを作成すると、パスワードは設定されていません。ゲストにインストールするアプリケーションによってはパスワードが必要なものもあるみたいです。cassandraをインストール&起動したときにパスワードを聞かれました。次回は、multipassで3つサーバを起動した状態でDocker swarmを使ってみたいと思います。最後まで読んで頂きありがとうございました。

参考

履歴

2024年12月07日:投稿

いいなと思ったら応援しよう!