vagrantとdockerで開発・ビルド環境の構築

dockerのimageとしてビルド環境を作るスクリプトがあったため、それを使えるように開発環境を作ってみたのでメモ
ビルドはクリーンな環境や特定のOSで行いたいものの、開発自体はツールなど整備してあるMac上で行いたいという意図。
Macでは直接dockerを扱えないため、間にVMを入れてその上でdockerのコンテナを作成

まず、vagrantVM作成

$ vagrant init 

同じディレクトリ内にビルドに必要なソースやスクリプトを入れておく

$ git clone hogehoge ←ビルドしたい対象
$ git clone fugafuga   ←dockerのimage作成用スクリプト

開発自体はここ(Mac上)で行ってgithubへ上げたりする

Vagrantfileを編集

VAGRANTFILE_API_VERSION = "2"                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                              
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                         
  config.vm.box = "hashicorp/precise64"                                                                                                                                                                                                                                                                                                                                                       
  config.vm.provision "shell", inline: <<-EOT                                                                                                                                                                                                                                                                                                                                                 
    apt-get update                                         
  # ビルドツールを入れる                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
    apt-get install -y build-essential                                                                                                                                                                                                                                                                                                                                                        
    apt-get install -y autoconf                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    apt-get install -y curl     
    # dockerを入れる                                                                                                                                                                                                                                                                                                                                                              
    apt-get install linux-image-generic-lts-raring                                                                                                                                                                                                                                                                                                                                            
    apt-get install linux-headers-generic-lts-raring                                                                                                                                                                                                                                                                                                                                          
    curl -s https://get.docker.io/ubuntu/ | sudo sh                                                                                                                                                                                                                                                                                                                                           
  EOT 

  // メモリを多めに割り当て
  config.vm.provider "virtualbox" do |vb|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    vb.customize ["modifyvm", :id, "--memory", "1024"]                                                                                                                                                                                                                                                                                                                                        
  end  
end

これでVMを作成して入る

$ vagrant up
$ vagrant ssh
||<  

このVM内でdockerのコンテナを作成してビルド環境を作る
このときMac上においたimage作成スクリプトを使いたいがそれは/vagrantからアクセスできる
>||
$ cd /vagrant/fugafuga
$ ./makeImage.sh(dockerのimageを作成するスクリプトがfugafuga内に用意されているとして)

dockerのimageが作成できたら、それを使って作成したコンテナ内でビルド用のソースにアクセスできるようにする

$ cd /vagrant/hogehoge
// hogehogeの直下にはMakefileがあるという想定
$ docker run -i -t -v `pwd`:/hogehoge -w /hogehoge <作成したimage名> make 
  • vは:で区切って前半がホスト側のディレクトリ、後半がコンテナ側のディレクトリで中身を共有するための指定
  • wは最後に指定したコマンドを実行する場所を指定

詳しくはdockerのページを見る
http://docs.docker.io/reference/run/

以上のようにすることでMac上で開発しつつ、独立したクリーンな環境でビルドを行うことができた