Vagrant v2 既存環境をコピーして新しいboxファイルを作成するには


前の記事「Vagrant v2 プロビジョニングの使い方、Chef SofoプロビジョナーでApacheをインストール」では、公開されているUbuntu 14.04のboxをローカル環境に追加(add)したものからプロビジョニングで必要な環境をセットアップしましたが、インストールするパッケージが多くプロビジョニングが必要な場合はboxに固めてそれを配布した方が効率が良い場合もあります。
例えば、ソースインストールする必要があるパッケージがある場合コンパイルに時間がかかります。そういった場合には便利です。

Vagrantの公式ドキュメントにでは、「Boxes – Vagrant Documentation」にまとまっています。

box コマンドおさらい

boxの管理はvagrant boxコマンドを利用します。
よく使うboxコマンドについてまとめておきます。

box add

Vagrantをインストールして、おそらく最初に実行するコマンドです。
boxをネットワークからダウンロードしてローカルのVagrant環境に登録します。
[bash gutter=”false”]
$ vagrant box add ubuntu/trusty64
==> box: Loading metadata for box ‘ubuntu/trusty64’
box: URL: https://vagrantcloud.com/ubuntu/trusty64
==> box: Adding box ‘ubuntu/trusty64’ (v14.04) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/1/providers/virtualbox.box
==> box: Successfully added box ‘ubuntu/trusty64’ (v14.04) for ‘virtualbox’!
[/bash]
VagrantのサイトDiscover Featured Vagrant Boxesで公開されているboxは、boxを名前で指定できます。
A list of base boxes for Vagrant – Vagrantbox.esなどで公開されているboxを追加する場合は以下のように名前に続けてboxのURLを指定します。
[bash gutter=”false”]
$ vagrant box add opscode/centos-7.0 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.0_chef-provisionerless.box
==> box: Adding box ‘opscode/centos-7.0’ (v0) for provider:
box: Downloading: http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.0_chef-provisionerless.box
==> box: Box download is resuming from prior download progress
==> box: Successfully added box ‘opscode/centos-7.0’ (v0) for ‘virtualbox’!
[/bash]

box list

ローカル環境にインストール済みのboxの一覧を表示します。
[bash gutter=”false”]
$ vagrant box list
CentOS6.5_64 (virtualbox, 0)
ubuntu/trusty64 (virtualbox, 14.04)
[/bash]

box remove

要らなくなったboxを削除します。
[bash gutter=”false”]
$ vagrant box remove ubuntu/trusty64
Removing box ‘ubuntu/trusty64’ (v14.04) with provider ‘virtualbox’…
[/bash]

基本的なコマンドは以上です。
公式サイトのリファレンスはこちら: vagrant box – Command-Line Interface – Vagrant Documentation

既存環境をコピーして新しいboxファイルを作成する

パッケージのインストールなど変更したboxをベースに新しいboxを作成するにはpackageコマンドを利用します。
packageコマンドはVagrantfileを含むプロジェクトのルートディレクトリで実行します。
[bash]
$ vagrant package
[/bash]
boxファイル「package.box」ファイルが作成されます。
vagrant addで作成したboxファイルを登録しておきます。
[bash gutter=”false”]
$ vagrant box add –name lampstack-trusty_tahr ./package.box
$ vagrant box list
CentOS6.5_64 (virtualbox, 0)
lampstack-trusty_tahr (virtualbox, 0)
ubuntu/trusty64 (virtualbox, 14.04)
[/bash]

,