Vagrant で仮想マシンのイメージファイルをBoxファイルとして保存する

packageオプションを使うことで、動作している仮想マシンのイメージファイルを、Boxファイルとして保存することができます。

素のCentOSのBoxファイルから作成・構築した仮想マシンを、Boxファイルとして保存しておけば、仮想マシンに何か問題があった場合や、同じ環境を作りたい場合に、便利だと思います。

環境

Boxファイルの作成

sample-vm という仮想マシンのBoxファイルを作成する想定で、操作方法を見てみましょう。

対象の仮想マシンを止める

仮想マシンが起動している場合は、まず停止しましょう。

$ vagrant status
Current machine states:

sample-vm                     running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

$ vagrant halt sample-vm
==> sample-vm: Attempting graceful shutdown of VM...

$ vagrant status
Current machine states:

sample-vm                     poweroff (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

Boxファイルを作成する

仮想マシンからBoxファイルを作成します。
使用するコマンドは以下の通りです。

$ vagrant package "仮想マシン名"

コマンドを実行して、package.box というファイルが生成されていればOKです。
以下の例では、「sample-vm」という仮想マシンのBoxファイルを生成しています。

$ vagrant package sample-vm
==> sample-vm: Clearing any previously set forwarded ports...
==> sample-vm: Exporting VM...
==> sample-vm: Compressing package to: c:/Vagrant/********/package.box

$ ls -l
-rw-r--r-- 1 130351019 1049089 753968010 8月  24 12:12 package.box

生成されるBoxファイルのファイル名を指定したい場合は、以下のように--nameオプションを指定しましょう。

$ vagrant package sample-vm --name ファイル名

Boxの登録

Boxファイルを作成したら、Vagrantで認識できるよう登録します。
コマンドは以下の通りです。

$ vagrant box add 登録時に認識させる名前 登録するBoxファイル

以下の例では、「package.box」というBoxファイルを「sample-vm」という名前で登録しています。

$ vagrant box list
bento/centos-6.7 (virtualbox, 2.2.7)
bento/centos-7.4 (virtualbox, 201803.24.0)
centos/6         (virtualbox, 1902.01)
centos/7         (virtualbox, 1902.01)

$ vagrant box add sample-vm package.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'sample-vm' (v0) for provider:
    box: Unpacking necessary files from: file://c:/Vagrant/********/package.box
    box: Progress: 100% (Rate: 311M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'sample-vm' (v0) for 'virtualbox'!

$ vagrant box list
bento/centos-6.7           (virtualbox, 2.2.7)
bento/centos-7.4           (virtualbox, 201803.24.0)
centos/6                   (virtualbox, 1902.01)
centos/7                   (virtualbox, 1902.01)
coreos-alpha               (virtualbox, 2121.0.0)
sample-vm                  (virtualbox, 0)

登録したBoxファイルは、以下のフォルダに保存されます。

C:\Users\ユーザ名.vagrant.d\boxes

使い方

作成したBoxを使って仮想マシンを立ち上げるには、通常通り初期化、起動の流れで問題なしです。

$ vagrant init sample-vm
$ vagrant up sample-vm