- Multipass とは
- macOS でのインストール
- Windows でのインストール
- VM起動から終了まで
- 利用可能なOSイメージの一覧
- VMのスペックを指定
- ホストディレクトリをマウントする
- VMの情報を確認する
- Docker で Nginx を起動する
- cloud-init でVMを初期設定する
Multipass とは
Multipass は、macOS, Linux, Windows で使えるマルチプラットフォームの軽量なVMマネージャです。
macOSではHyperKit、Linux では KVM、WindowsではHyper-V を使用するため、最小限のオーバーヘッドでVMを実行することができます。
Ubuntu の開発元である Canonical社により提供されているため、VMイメージは Ubuntu に限られますが、コマンド1つで新鮮な Ubuntu 環境がすぐに利用可能となり、さらに cloud-init がサポートされるため、開発環境で小規模なクラウド展開をシミュレートすることができます。
また、昨今では、Docker Desktop の代替としての利用も増えています。
macOS でのインストール
インストーラからインストールできる他、
Homebrew からインストール可能です。--cask
でインストールします。
$ brew install --cask multipass
...
installer: Package name is multipass
installer: Installing at base path /
installer: The install was successful.
🍺 multipass was successfully installed!
インストールが完了すると、アプリケーションに Multipass が追加され、multipass
コマンドが利用可能となります。
$ multipass version multipass 1.8.1+mac multipassd 1.8.1+mac
アンインストールは以下で行えます。
$ brew uninstall multipass
Windows でのインストール
インストーラをダウンロードしてセットアップ ウィザードに沿ってインストールします。
インストールが完了すると、ユーザの環境変数にパスが追加されているので、multipass
コマンドが利用可能となります。
トールが完了すると、ユーザの環境変数にパスが追加されているので、multipass
コマンドが利用可能となります。
> multipass version multipass 1.8.0+win multipassd 1.8.0+win
VM起動から終了まで
launch
コマンドで、OSイメージの取得からバーチャルマシンの起動までが可能です。
OSイメージはデフォルトで、Ubuntu の LTS が選択されます(初回はイメージのダウンロードにそれなりの時間がかかります)。
$ multipass launch Launched: respected-hornbill
--name
オプションでインスタンス名を指定することもできます。
省略時はランダムな名前(上記例では respected-hornbill)が付与されます。
--name
オプションを指定する場合は以下のようになります。
$ multipass launch --name myVM
インスタンスは list
コマンドで一覧できます。
$ multipass list Name State IPv4 Image myVM Running 192.168.64.2 Ubuntu 20.04 LTS
起動しているインスタンスのシェルに入るには shell
コマンドを使います。
$ multipass shell myVM
以下のようなメッセージとともに、VM内のシェルに接続できます。
シェルからは exit
で抜けることができます。
ワンライナーなコマンドは、シェルに入らずに exec
コマンドで以下のように実行することもできます。
$ multipass exec myVM -- uname -r 5.4.0-105-generic
起動しているインスタンスを停止するには stop
コマンドを使います。
$ multipass stop myVM
インスタンスを削除するには delete
コマンドを使います。
$ multipass delete myVM
delete したインスタンスは multipass recover
で再度利用することもできます。
インスタンスを完全に削除するには purge
します。
$ multipass purge
以下のようにすることで、delete と purge を同時に行うこともできます。
$ multipass delete --purge myVM
利用可能なOSイメージの一覧
利用可能なOSイメージは find
コマンドで確認できます。
$ multipass find Image Aliases Version Description 18.04 bionic 20220325 Ubuntu 18.04 LTS 20.04 focal,lts 20220322 Ubuntu 20.04 LTS 21.10 impish 20220309 Ubuntu 21.10 anbox-cloud-appliance latest Anbox Cloud Appliance charm-dev latest A development and testing environment for charmers docker latest A Docker environment with Portainer and related tools minikube latest minikube is local Kubernetes
docker
や minikube
、Charm
のテスト環境用のイメージも提供されています。
デフォルトは最新の LTS である Ubuntu 20.04 となります。
以下のようにイメージ名またはエイリアス名を指定してOSイメージを指定することができます。また、イメージ名の代わりに、カスタムイメージのURLを指定することもできます。
$ multipass launch --name myVM 21.10
VMのスペックを指定
デフォルトでは、CPU:1、ディスク:5G、メモリ:1G となります。
必要に応じて、以下のように指定することができます。
$ multipass launch --cpus 2 --disk 40G --mem 4G --name myDocker docker Launched: myDocker
docker イメージからVMが起動すれば docker が利用可能です。
$ multipass exec myDocker -- docker version Client: Docker Engine - Community Version: 20.10.14 API version: 1.41 Go version: go1.16.15 Git commit: a224086 Built: Thu Mar 24 01:48:07 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.14 API version: 1.41 (minimum version 1.12) Go version: go1.16.15 Git commit: 87a90dc Built: Thu Mar 24 01:45:56 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.5.11 GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8 runc: Version: 1.0.3 GitCommit: v1.0.3-0-gf46b6ba docker-init: Version: 0.19.0 GitCommit: de40ad0
ホストディレクトリをマウントする
mount
コマンドにて、ローカルディレクトリ VM名:VM側のマウントポイント を指定します。
$ multipass mount ~/doc myDocker:/mnt/doc
Windows 環境の場合は、管理者権限にて、set
コマンドでマウント可に設定する必要があります。
> multipass set local.privileged-mounts=true
その後、以下のようにマウントします。
> multipass mount .\doc myDocker:/mnt/doc
アンマウントは umount
コマンドを使います。
$ multipass umount myDocker:/mnt/doc
全てアンマウントするには以下のようにすることもできます。
$ multipass umount myDocker
VMの情報を確認する
VMの情報は info
コマンドで見ることができます。
$ multipass info myDocker Name: myDocker State: Running IPv4: 192.168.64.5 172.17.0.1 Release: Ubuntu 21.10 Image hash: 96768217b9b5 (Ubuntu 21.10) Load: 0.00 0.00 0.00 Disk usage: 2.1G out of 38.6G Memory usage: 193.5M out of 3.8G Mounts: /Users/xxx/doc => /mnt/doc UID map: 501:default GID map: 20:default
先程マウントした内容も反映されていますね。
Docker で Nginx を起動する
作成した VM myDocker で Nginx を起動してみましょう。
$ multipass exec myDocker -- docker run -d --rm -p 8080:80 nginx
info コマンドで確認したIPアドレスでアクセスすれば、Nginx の起動が確認できます。今回の場合は、http://192.168.64.5:8080
となります。
cloud-init でVMを初期設定する
Multipass は、cloud-init を利用できるため、システムの起動時にインスタンスの初期化を自動化できます。
cloud-config.yaml
として以下のようなファイルを用意し、
#cloud-config locale: en_US.UTF8 timezone: Asia/Tokyo package_upgrade: true packages: - apache2
--cloud-init
オプションで指定することで、インスタンスの初期化時のタスクを自動化できます。
$ multipass launch --cloud-init cloud-config.yaml
上記設定では apache2(httpd) が動きます。
cloud-init の詳細は以下を参照してください。