ちょっとずつ試してる。環境は以下。

  • 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/」 にアクセスできるはずです。

gf-docker.png

停止は、Ctrl-C です。これだとコンテナの起動のたびにデータが消えてしまうので、適当なディレクトリをマウントします。

$ mkdir -p /home/vagrant/growthforecast/data
$ docker run -p 5125:5125 -v /home/vagrant/growthforecast/data:/var/lib/growthforecast kazeburo/growthforecast

これで再起動してもデータが初期化されることが無くなりました。

まだまだやってみたレベル。。

このブログ記事について

このページは、Masahiro Naganoが2013年12月26日 13:37に書いたブログ記事です。

ひとつ前のブログ記事は「Released GrowthForecast-0.80. ドキュメントページの英語化」です。

次のブログ記事は「一時ファイルとdentry cacheとメモリ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja