Ubuntu Weekly Recipe

第565回 サーバー向けインストール済みイメージを活用しよう

この記事を読むのに必要な時間:およそ 5.5 分

第561回ではローカルのマシンでもcloud-initを用いて初期設定できる方法を解説しました。そこで今回は,Ubuntuが提供する各種クラウド向けイメージの活用方法を紹介します。

クラウドイメージの利点

Ubuntuでは通常のインストーラー付きイメージとは別にクラウドイメージも提供しています。これは最新のアップデートを適用した「インストール済み」のイメージで,各種仮想マシンやコンテナでそのまま起動できる形式で配布されています。

配布形式はディスクイメージだったり,単にルートファイルシステムをtarでアーカイブしたものだったりとさまざまです。アカウントは設定されていません。rootもロックされた状態なので,もしクラウドイメージを起動してログインする必要があるなら,cloud-initを用いた設定が必要です。もちろん手作業で展開・カスタマイズ・再アーカイブもできます。

主なターゲットはパブリックもしくはプライベートのクラウドサービスです※1⁠。これらのクラウドサービスでは,インスタンスの立ち上げごとにインストーラーを起動していては煩雑になってしまいます。そこで立ち上げ時に機械的にカスタマイズ可能なインストール済みイメージを提供することで,各サービスベンダーはインスタンスの作成を容易に自動化できるのです。

※1
たとえばUbuntuが提供しているクラウドイメージロケーターでは,メジャーなパブリッククラウドサービスに対して,検索・指定したUbuntuイメージで起動できます。このようなサービスのためにも,Ubuntuは各クラウドが最新のイメージを提供しやすいよう,インストール済みイメージを公開しているのです。

さらにクラウドイメージは「最新のアップデートが適用済み」の状態で提供されています。つまり定期的にビルドが行われているのです。このためインストール後からアップデート完了までのリスク期間も減らせます。

そもそもUbuntuサーバーを「普通に」インストールしようとしたら,インストールディスク(800MiB程度)をダウンロードし,マシンにインストールし,最新のアップデート(タイミングによっては200MiB程度)をダウンロードし,それを適用しなくてはなりません。それに比べたら,300MiBぐらいのアップデート適用済みイメージをダウンロードして起動したほうがはやいのは当然ですよね。

もちろんこれらの利点はクラウドサービス以外でも意味があります。第561回のように,仮想マシンインフラでもクラウドイメージ(とcloud-init)を活用すれば,個人のネットワークの「ギガが減る」ことなくUbuntuサーバーを構築できるのです※2⁠。

※2
とは言え「ギガが減る」ことを気にするネットワークにおいて,クラウドイメージのダウンロードはあまりおすすめしません。

「クラウドイメージ」だからと言ってクラウドでしか使えないわけではありません。UbuntuはおおよそFLOSSで構築されていますし,Linuxサーバーとして使うにあたってサブスクリプションなども不要です。自分が便利だと思う方法でどんどん活用していきましょう※3⁠。

※3
「おおよそ」の部分がネックになったりするのですが,main/universeコンポーネントであれば,原則としてDebian Free Software Guidelines準拠のはずではあります。よってクラウドイメージをカスタマイズしたイメージの再配布も自由に行なえます。ちなみに商標が関わってくると話は別です。

クラウドイメージの種類

2019年4月時点でUbuntu 18.04 LTS向けに提供されているクラウドイメージには次の種類が存在します。

ubuntu-18.04-server-cloudimg-amd64-root.tar.xz
  • ルートファイルシステムをただtar.xzで固めたアーカイブです(約140MiB)
  • カーネルやブートローダーはインストールされていません
  • コンテナのベースイメージや組み込みシステムでの利用を想定しています
  • 最小のルートファイルシステムが欲しいなら,Ubuntu BaseUbuntu Minimalを使いましょう
ubuntu-18.04-server-cloudimg-amd64.img
  • QEMU/KVM向けのQCOWイメージです(約300MiB)
  • QEMU/KVMベースの仮想マシン管理システムやOpenStackなどで使われます
  • カーネルやブートローダーもインストールされています
ubuntu-18.04-server-cloudimg-amd64.ova
  • OVA(Open Virtual Appliance)形式のイメージです(約300MiB)
  • VirtualBoxやVMWareをはじめとするOVA対応の仮想マシンシステムで使います
  • フォーマットが異なるだけで内容はQCOWイメージと同じです
ubuntu-18.04-server-cloudimg-amd64-vagrant.box
  • VirtualBox向けのVagrant Boxファイル(OVF形式)です(約300MiB)
  • フォーマットが異なるだけで内容はQCOWイメージと同じです
ubuntu-18.04-server-cloudimg-amd64.vhd.zip
  • VHD(Virtual Hardk Disk)形式のイメージです(約400MiB)
  • 主にHyper-Vで使います
  • フォーマットが異なるだけで内容はQCOWイメージと同じです
ubuntu-18.04-server-cloudimg-amd64.vmdk
  • VMDK(Virtual Machine Disk)形式のイメージです(約300MiB)
  • 主にVMWareで使います
  • 実はOVAやVagrant Boxにはこのファイルがそのまま入っています
  • フォーマットが異なるだけで内容はQCOWイメージと同じです
ubuntu-18.04-server-cloudimg-amd64.squashfs
  • squashfs形式のルートファイルシステムです(約200MiB)
  • 読み込み専用のファイルシステムとしてマウントします
  • 通常はOverlayFS2などと併用して書き込み領域可能を用意します
ubuntu-18.04-server-cloudimg-amd64.tar.gz
  • ext4イメージファイルをtar.gzでアーカイブしたものです(約300MiB弱)
  • QEMU/KVMやXenなど各種仮想マシン管理システムで使えます
  • BIOS用のMBRやUEFI用のESPは別途用意する必要があります
  • フォーマットが異なるだけで内容はQCOWイメージと同じです
ubuntu-18.04-server-cloudimg-amd64-lxd.tar.xz
  • LXD向けのテンプレートです(約1KiB)
  • サイズからもわかるように,これ単体は起動可能なイメージファイルではありません
  • 別途ダウンロードしたルートファイルシステムなどと組みあわせて使います

どのイメージも,インストールされているものはほぼ同じです。異なるのはブートローダー関連とカーネルがインストールされているかどうか,です。ディスクイメージタイプはインストールされていて,ただのアーカイブタイプはインストールされていません。

よって使用している仮想マシン管理システムにあわせてダウンロードするフォーマットを決めてください。よく使われるVirtualBoxやVMWareであれば,OVAを選んでおけば問題ないです。

ディスクイメージタイプのルートファイルシステムのパーティションサイズはおおよそ2GiB(tar.gzのext4だけ1GiB)に設定されています。これはインストールされている状態でほぼ使用率100%に近いので,実際に使う場合はパーティションを拡張する必要があります。仮想マシンシステムごとにデプロイする際にパーティションサイズを指定できるはずです。なおファイルシステムのサイズは,パーティションのサイズにあわせて自動拡張されます。

今回は上記の中でも特に「そのまま使える形式」である,QCOW形式,Vagrant Box形式,OVA形式について説明します。

また,QCOWとOVAについてはcloud-initで初期セットアップできると便利です。第561回にローカルでcloud-initを使うためのイメージの作り方を解説していますので,そちらもあわせて参照してください。とりあえず今回はパスワードの設定が必須なので,次のようにcloud-init用のイメージファイルを作っておくこととします。

$ sudo apt install cloud-image-utils
$ cat >user-data <<EOF
#cloud-config
password: ubuntu
chpasswd: { expire: False }
ssh_pwauth: True
EOF
$ cloud-localds user-data.img user-data

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。