cloud-initをサクッと自宅のPC上で使いたかったが、VMWareやVirtual Boxではisoをビルドする必要があるなど少々面倒。

MultipassというUbuntuのインスタンスを手軽に作成できるVMマネージャを使えば、コマンド一つでcloud-initをもとにしたイメージを起動できる。

もちろん仮想マシンの中ではdockerなどのコンテナも動かせる

公式サイト
https://multipass.run/

筆者の環境

  • Ubuntu 20.04.5 LTS

インストール

以下コマンドを実行する

sudo snap install multipass

snapはUbuntu18 LTS以降であればデフォルトでインストール済みのコマンドなはず。

VMを起動

以下コマンドを実行する

fooは名前なので任意に設定できる

multipass launch --name foo

Cloud-Init から VMを起動

以下コマンドを実行する
barは名前なので任意に設定できる
cloud-config.yaml は cloud-initファイルへのパス

multipass launch --name bar --cloud-init cloud-config.yaml

筆者は試しに以下のようなcloud-config.yamlを記述した

#cloud-config
timezone: Asia/Tokyo
locale: en_US.UTF-8

runcmd:
  - sudo apt-get update
  - sudo apt-get install -y ca-certificates curl gnupg lsb-release
  - sudo mkdir -p /etc/apt/keyrings
  - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"  
    | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  - sudo apt-get update
  - sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

cloud-init.yaml

VMに接続する

以下コマンドを実行する
barは先程指定した名前

multipass exec bar bash

今までの出力はこんな感じ

aaa@desktop:~$ multipass launch --name bar --cloud-init cloud-config.yaml
Launched: bar                                                                   
aaa@desktop:~$ multipass exec bar bash                                          
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@bar:~$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

参考

https://multipass.run/install