カスタムVagrant Boxのビルドとローカル環境への適用手順

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や名前を指定すれば同様にアーカイブ化できます。

タグ: vagrant VirtualBox provisioning CustomBox ShellScript

6月21日 16:29 投稿