インターネットでの共有
Vagrantの開発元でもあるHashiCorpがAtlasというサービスを提供しています。
これを使うと、Vagrantのboxをアップロードし、共有することができます。コストもかからないし、バージョン管理もできちゃいます。
Atlasに登録したものは、そのまま名前を指定すると仮想マシンを立ち上げられます。
vagrant init onozaty/redmine-3.2 vagrant up
とても便利ですね!
インターネットに公開できない場合
インターネット上に公開できないようなものの場合だと、Atlas使えないのでちょっと面倒です。
ファイルサーバなどでboxを共有する
みんなが参照可能な場所にboxを配置し、vagrant init
時にURLを指定します。
vagrant init testapp file:////server/vagrant/testapp.box vagrant up
ちなみに、上記は下記と同じです。
vagrant box add testapp file:////server/vagrant/testapp.box vagrant init testapp vagrant up
場所を周知するだけなので、そこまで面倒ではありませんが、あんまりパスを入力したくないですよね、、
boxの場所が書かれたVagrantfileを配布する
ということで、パスを入力するのが嫌なので、別の方法としてVagrantfile
を配布する方法があります。
Vagrantfile
には、boxのURLが書けて、boxとして登録されていない場合には、そのURLからboxを取得して登録してくれます。
(vagrant init <box名> <URL>
でVagrantfile作った時にも同様のVagrntfileが作られています)
- Vagrantfile
Vagrant.configure(2) do |config| config.vm.box = "testapp" config.vm.box_url = "file:////server/vagrant/testapp.box" end
これならば、配布されたVagrantfile
を置いたディレクトリで
vagrant up
で終了です。
バージョン管理をする
Vagrantには、boxに対してバージョンを付与し、boxをアップデートする仕組みが用意されています。(Atlasでは、アップロード時にバージョンも記入するので、その情報を元に最新があるかどうかを返してくれています)
jsonファイルにて記載します。バージョンの情報として、バージョン毎のbox取得先URLが記載されています。
- testapp.json
{ "description": "Test", "short_description": "Test", "name": "testapp", "versions": [{ "version": "1.0.0", "status": "active", "description_html": "<p>Test App</p>", "description_markdown": "Test App", "providers": [{ "name": "virtualbox", "url": "file:////server/vagrant/testapp-1.0.0.box" }] }, { "version": "1.1.0", "status": "active", "description_html": "<p>Test App</p>", "description_markdown": "Test App", "providers": [{ "name": "virtualbox", "url": "file:////server/vagrant/testapp-1.1.0.box" }] }] }
boxのURLとして、上記のjsonファイルを指定します。
vagrant box add file:////server/vagrant/testapp.json vagrant init testapp vagrant up
こうすると、jsonに書かれた最新のバージョンを使って立ち上がります。
boxがアップデートされた時には、jsonのファイルを修正すると、vagrant up
の時に、新しいものがあることを伝えるメッセージが出ます。
>vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'testapp' is up to date... ==> default: A newer version of the box 'testapp' is available! You currently ==> default: have version '1.1.0'. The latest is version '1.2.0'. Run ==> default: `vagrant box update` to update.
vagrant box update
でboxが更新できます。
vagrant box update --box testapp
jsonファイルもconfig.vm.box_url
に指定できるので、Vagrantfileを配布するような方法も取ることができます。