Vagrantを用いた開発環境の構築において、初期のセットアップフェーズが重複したり、プロビジョニングの実行時間が長引いたりするケースはよくあります。チーム全体で利用する共通の基盤イメージを事前に準備しておくことで、仮想マシンの起動速度を向上させ、セキュリティ設定や基本ソフトウェアのバージョン管理を一括で行うことが可能です。本記事では、既存の公開イメージをベースに独自の環境を構築し、カスタムBoxとしてパッケージ化する作業流程を解説します。
カスタムBoxに求められる基本条件
Vagrantが仮想マシンを管理するためには、ターゲットイメージ内に以下の要素が必须具备です。
- SSHサーバーの稼働: ホストからゲスト環境へ接続するための通信経路
- 認証情報の設定: 秘密鍵認証またはパスワード認証用の既定アカウント(標準では
vagrantユーザー) - ハイパーバイザ連携ツール: VirtualBox環境であればGuest Additionsの導入、また初回通信用のNATアダプタ設定
これらを整備済みの公開Boxを土台とし、必要に応じて追加パッケージをインストールすることで、効率的に開発基盤を構築できます。
環境の初期化とプロビジョニング設定
まずは作業ディレクトリを作成し、Ubuntu Xenial (16.04) 版のベースイメージを読み込みます。
vagrant init ubuntu/xenial64
生成された Vagrantfile を編集し、OpenJDK 8とTomcat 8を自動展開するシェルスクリプトを埋め込みます。また、ホストマシンからTomcatの管理画面へアクセスできるようポートマッピングを設定します。
Vagrant.configure("2") do |env|
env.vm.box = "ubuntu/xenial64"
env.vm.provider "virtualbox" do |vb|
vb.name = "dev-base-vm"
end
env.vm.network "forwarded_port", guest: 8080, host: 8080
env.vm.provision "shell", inline: <<-SHELL
export DEBIAN_FRONTEND=noninteractive
apt-get update -y
apt-get install -y openjdk-8-jdk tomcat8
systemctl enable tomcat8
SHELL
end
上記設定により、仮想マシン初回起動時にパッケージリストの更新とソフトウェアのインストールが自動実行されます。ネットワーク設定で forwarded_port を指定しているため、ホスト側の http://localhost:8080 でWebサーバーのステータスを監視できます。
仮想マシンの起動と動作確認
設定ファイルを保存した状態で構築コマンドを発行します。
vagrant up
プロビジョニングが完了し仮想マシンが起動した後、ブラウザまたはcurlコマンドで http://localhost:8080 にアクセスしてください。Tomcatのデフォルトウェルカムページが表示されれば、インストール処理は成功しています。
Boxイメージへの変換と登録
環境構築が完了した仮想マシンをBoxファイルに変換するには、まずターゲットを停止状態にします。
vagrant halt
次に、パッケージングコマンドを実行してアーカイブを生成します。出力先ファイル名を明示的に指定することで、管理が容易になります。
vagrant package --base dev-base-vm --output custom-java-tomcat.box
実行ディレクトリに custom-java-tomcat.box が作成されます。このファイルをVagrantのローカルリポジトリへ追加登録します。
vagrant box add myorg/java-tomcat-base ./custom-java-tomcat.box
登録が完了したか確認するには、一覧表示コマンドを用います。
vagrant box list
出力結果に myorg/java-tomcat-base が記載されていれば、次回以降のプロジェクトで vagrant init myorg/java-tomcat-base と指定するだけで、事前構築済みの基盤環境を瞬時に変更可能になります。パッケージ化の対象は必ずしもVagrantで管理中のインスタンスに限定されず、VirtualBoxマネージャーで独立して作成した仮想マシンに対しても --base オプションでUUIDや名前を指定すれば同様にアーカイブ化できます。