tokuhirom's blog

Docker で Growthforecast をインストールする方法

ちょいちょい GrowthForecast のインストールが perl だから難しいとかいってる人をみかけるけれど、Dockerfile が用意してあれば、セットアップは簡単になるんじゃないだろうか。

audreyt が Dockerfile で配布する方法で irc logger を配布していたし、それを真似してみるのもアリかもしれない。そんな風におもって僕もやってみることにした。

Docker をつかうと、アプリをふくんだイメージを簡単に配布することが可能となる。インストール手順をごちゃごちゃとブログに書いたりするのもいいけれど、Dockerfile を共有したほうがいいのではないだろうか。再現可能だし。chef でもなんでもいいけど、docker はインストールが簡単なのがいいし、覚えることがすくなくていい。

いらなくなったら、イメージごとポイすればいいだけで、簡単だしね。


さて本題、今回ぼくは GrowthForecast をインストールするための Dockerfile を以下のように記述してみた。

cat Dockerfile
# DOCKER-VERSION 0.3.4

FROM ubuntu:quantal
RUN apt-get install -y librrd4 librrds-perl curl build-essential
RUN curl -L http://cpanmin.us | perl - App::cpanminus
RUN apt-get install -y libdbd-sqlite3-perl libwww-perl
# build-dep rrdtool
RUN apt-get install -y groff autotools-dev gettext quilt zlib1g-dev libpng12-dev libcairo2-dev libpango1.0-dev  libfreetype6-dev libdbi0-dev libxml2-dev

RUN cpanm --notest File::Which File::chdir File::ShareDir
RUN cpanm --notest --installdeps Alien::RRDtool
RUN cpanm --notest --verbose Alien::RRDtool
RUN cpanm --notest GrowthForecast

EXPOSE 5125
RUN growthforecast.pl

こまかく RUN ががわかれてるのは、途中から再開しやすくするためと、なんか長い時間かかるコマンドを実行してるとたまにエラーになったためです(たぶん Docker のバグかな)。

このファイルを Dockerfile という名前で保存しておいて、docker build -t tokuhirom/growthforecast . とかすると、そのうち growthforecast が起動する。別のターミナルで docker ps とうつと以下のような表示がでる。

ID                  IMAGE               COMMAND                CREATED             STATUS              PORTS
c13f6636274b        7f277a89d25e        /bin/sh -c growthfor   9 minutes ago       Up 9 minutes        49153->5125

gf のデフォルトポートである 5125 ポートが、親ホストの 49153 ポートにマッピングされてるんで、ここにアクセスすればいいだけ。簡単。

イメージをアップロードしてもよかったんだけど、メンテナンスする気とかはとくにないので、誰かやる気のある人がアップしたらいいとおもいます。


このエントリーでなにをいいたいかというと、Perl5 でできたアプリケーションも、Dockerfile 形式で配布すれば Perl5 に馴染がない人でも簡単にインストールできるようになるよ、ってこと。そして、perl5 のアプリケーションを Dockerfile でセットアップするのはすごく簡単だよってこと。

そういうわけで、単体のミドルウェアとして実行するようなアプリケーションの場合には、こういう形式で配布してみるのもいいんじゃないでしょうか。という提案エントリーなのでした。

Created: 2013-08-14 19:06:28 +0900
Updated: 2013-08-14 19:06:28 +0900