開発時に複数DB用意したいとか、異なるバージョンのアプリを同時に起動しておきたいとか、理由はいろいろあるんですが、そういうときのために。
Vagrantfileはこちら。
https://github.com/mystelynx/osx-docker/blob/master/Vagrantfile
落としてきて、
vagrant up
で、postgres-5432
, postgres-5433
というコンテナが立ちあがります。
ポイント
Vagrantfileを1つにまとめた
ホストとなるVirtualBox用のVagrantfileと、Dockerコンテナ用のVagrantfileを分けてる例がたくさんあったのだけど、1つにまとめてみた。
理由はホストVMに設定するポートフォワーディングの設定と、Dockerコンテナに設定するポートの設定が別ファイルになってしまうため見辛かったから。
d.vagrant_vagrantfile = "./Vagrantfile"
d.vagrant_machine = "base"
あと、別にファイルを分けなくてもvagrant_machine
を設定しとけばホストマシンを指定できることに気付いたから。
Vagrantfile内のVM定義順序
必ず上からホストVM→Dockerコンテナの順で定義しないとダメ。
逆にしてしまうと、
1. Dockerコンテナを起動させようとする
2. Docker Provider内のvagrant_vagrantfile
の指定によりホストVMを起動してくれる
3. Dockerコンテナが全て起動する
4. config.vm.define
によりホストVMを直接起動しようとする
ので、ホストVMが2個起動する上に、ポートフォワードの設定で Already Used とか言われエラーで爆死します。。。
postgresqlの公式イメージを使用するように
最初はpaintedfox/postgresqlでやってたんですが、動きはしたんですがよくわからんエラー出たり、dockerサービスのオプションを追加してやらなきゃいけなかったりと大変だったので移行。
vagrant status
で、ホストVM、コンテナが一緒に並んでくれるので、わざわざ`vagrant global-status
をやんなくていい。
弱点
ホストVMを使いまわせないので、1つのホストVMだけで済ませたいという要望は満たせない。そういうときは大人しくVagrantfileを分割して、ホストVM用のVagrantfileをDockerコンテナ定義から参照しましょう。