cloud-initをサクッと自宅のPC上で使いたかったが、VMWareやVirtual Boxではisoをビルドする必要があるなど少々面倒。
MultipassというUbuntuのインスタンスを手軽に作成できるVMマネージャを使えば、コマンド一つでcloud-initをもとにしたイメージを起動できる。
もちろん仮想マシンの中ではdockerなどのコンテナも動かせる
筆者の環境
- 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