ちょっとずつ試してる。環境は以下。
- MacOS X 10.8
- VirtualBox 4.3.2
- Vagrant 1.3.5
- Packer v0.4.0
packer でCentOS6.5のイメージを作る
まず、packerを使ってCentOS 6.5のイメージを作るところから。テンプレートはgithubにあげてます。
$ git clone https://github.com/kazeburo/my_packer.git
$ cd my_packer
$ packer build centos6.5.json
テンプレートは https://github.com/hnakamur/my-packer-template-files
を参考にさせて頂きました。
このあとの作業が楽になるようにCentOS
6.5をインストールしたあとに、yum groupinstall "Development Tools"
し、不必要そうなサービスを止めています。
ビルドが完了すると、「packer_virtualbox_virtualbox.box」ができるので、vagrantに登録
$ vagrant box add centos6.5dev packer_virtualbox_virtualbox.box
ここでは「centos6.5dev」という名前にしています。
vagrant plugin の導入
vagrant-vbguest
VirtualBox Guest Additions を自動でアップデートしてくれるpluginを導入します。あると便利
$ vagrant plugin install vagrant-vbguest
vagrant-reload
provisionの中でゲストマシンの再起動できます。kernelのアップデートがある時には必須
$ vagrant plugin install vagrant-reload
Vagrantを使って起動する
つくったCentOSのイメージを起動する
$ mkdir learning_docker
$ cd learning_docker
$ vagrant init centos6.5dev
そしてdockerをすぐに使えるようにprovisionerを使っていくつか設定します
$ cat Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos6.5dev"
config.vm.network "forwarded_port", guest: 5125, host: 15125
config.vm.provision :shell, :inline => <<-EOT
curl -fsSkL -o /etc/yum.repos.d/hop5.repo http://www.hop5.in/yum/el6/hop5.repo
yum remove -y kernel-headers
yum install -y kernel-ml-aufs kernel-ml-aufs-devel kernel-ml-aufs-headers
yum groupinstall -y 'Development Tools'
sed -i "s/default=1/default=0/" /boot/grub/grub.conf
yum install -y docker-io
gpasswd -a vagrant docker
chkconfig docker on
service docker start
EOT
config.vm.provision :reload
end
動作に必ず要るわけではないですが、aufs-backed docker host on centos6 | blog.hansode.org を参考にaufs対応カーネルをいれています。また、仮想マシンの中で起動したgrowthforecastにアクセスするためのport forwardの設定や、vagrantユーザでdockerを使えるようにグループの設定もしています。
これで仮想マシンを起動します。初回起動時にprovisionerが動いて、kernelを入れ替えて一度再起動します。
$ vagrant up
上がってくると vagrant-vbguest がVirtualBox Guest Additionsのアップデートを行い、正常に起動するはず。
$ vagrant ssh
これで dockerを使う準備ができました。
$ docker info
Containers: 0
Images: 0
Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 0
WARNING: No swap limit support
DockerでGrowthForecastを起動する
上の準備でvagrantユーザでdockerが使えるようになっているので、適当なディレクトリを作り、Dockerfileを作ります。
$ mkdir growthforecast
$ cd growthforeacst
$ cat Dockerfile
FROM centos
RUN yum -y groupinstall "Development Tools"
RUN yum -y install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel git ipa-gothic-fonts
RUN git clone https://github.com/tagomoris/xbuild.git
RUN xbuild/perl-install 5.18.1 /opt/perl-5.18
RUN echo 'export $PATH=/opt/perl-5.18/bin:$PATH' > /etc/profile.d/xbuild-perl.sh
RUN /opt/perl-5.18/bin/cpanm -n GrowthForecast
RUN mkdir -p /var/lib/growthforecast
EXPOSE 5125
CMD ["/opt/perl-5.18/bin/growthforecast.pl","--data-dir","/var/lib/growthforecast"]
そして、docker buildでイメージを作ります
$ docker build -t user/growthforecast .
perlのビルドも行うのですごく、、時間かかります。
これができたら、コンテナの起動です。
$ docker run -p 5125:5125 kazeburo/growthforecast
5125は、vagrantでport forwardの設定がしてあるはずなので、Mac上のブラウザから、「http://localhost:1525/」 にアクセスできるはずです。
停止は、Ctrl-C
です。これだとコンテナの起動のたびにデータが消えてしまうので、適当なディレクトリをマウントします。
$ mkdir -p /home/vagrant/growthforecast/data
$ docker run -p 5125:5125 -v /home/vagrant/growthforecast/data:/var/lib/growthforecast kazeburo/growthforecast
これで再起動してもデータが初期化されることが無くなりました。
まだまだやってみたレベル。。