はじめに
基本的にvagrantで作ったVMは、使い終われば消す。使うときにまた作る。それがリソース面での大きな利点なので。
初期設定はprovisionでシェルに書いてしまうので、途中の状態でBox化する必要はない。(別にyumのインストールの時間も気にならない)
ただ、前回の記事のように初期設定にGUI操作があって完全自動化したい場合はそれでは困るので、設定完了後の状態からBox化しようと思う。
方法
vagrant packageコマンドを使用する。
ネットワークデバイス情報削除、VM停止
[root@phpipam vagrant]# sudo rm /etc/udev/rules.d/70-persistent-net.rules # 抜ける MacBook-Air:techstudy take$ vagrant halt phpipam ==> phpipam: Attempting graceful shutdown of VM... ==> phpipam: Removing hosts Password:
packageコマンド実行
MacBook-Air:techstudy take$ vagrant package phpipam ==> phpipam: Clearing any previously set forwarded ports... ==> phpipam: Exporting VM... ==> phpipam: Compressing package to: /Users/take/vagrant/techstudy/package.box
boxに追加
MacBook-Air:techstudy take$ vagrant box add phpipam package.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'phpipam' (v0) for provider: box: Unpacking necessary files from: file:///Users/take/vagrant/techstudy/package.box ==> box: Successfully added box 'phpipam' (v0) for 'virtualbox'!
追加を確認
MacBook-Air:techstudy take$ vagrant box list CentOS66 (virtualbox, 0) CentOS7 (virtualbox, 0) phpipam (virtualbox, 0) ubuntu1404 (virtualbox, 0)
作ったboxからVMを作成する
新規に別のディレクトリを作成する。Vagrantfileは以下のように作成して、vagrant upすると既にデータベースがインストールされた状態で作成された。
Vagrantfile
Vagrant.configure(2) do |config| config.vm.box = "phpipam" config.vm.define :phpipam do | phpipam | phpipam.vm.hostname = "phpipam" phpipam.vm.network :private_network, ip: "192.168.33.16"#, virtualbox__intnet: "intnet" end end
provissionした状態でBox化したるのでprovisionは不要。networkは作成する必要はあるけど、ipは指定しなくてもいいかもしれない。
おわりに
provissionが全自動できない場合や、時間がかかる場合は設定完了後に再Box化(package)すると良いですね。
調べ途中、Boxをバージョン管理できるみたいなので次回はその方法を試して、インストール段階ごとにバージョン化してみたいです。