LoginSignup
12
12

More than 5 years have passed since last update.

HRForecastのdocker imageを作成してみた。

Last updated at Posted at 2014-01-13

HRForecastのdocker imageを作ってみた。

dockerというものに前から興味があるので、作ってみた。

スクリーンショット 2014-01-13 21.28.02.png

動かし方

dockerのVagrantfileを参考にして、
github.com/futoase/docker-tempate を git cloneし、vagrant up --provisionを行えば良いようにしてみた。

> git clone https://github.com/futoase/docker-template
> cd docker-template/hrforecast
> vagrant up --provision

以上のコマンドを実行し、

にアクセスすれば立ち上がったHRForecastのindex pageが出る。
APIに向けてcurlコマンドを実行しても問題がない。
よかった。作れた。

2014/1/21更新

TrustedBuildというgithub連携の仕組みを利用するようにした。
合わせて、リポジトリも作りなおした。

リポジトリの対象が変わったため、以下の形でhrforecastのdocker containerを立ち上げ、アクセスを行う。

> git clone https://github.com/futoase/docker-hrforecast.git
> cd docker-hrforecast
> vagrant up --provision
> open http://192.168.33.100/

docker imageを作るまで

以下の環境でdocker imageを作り、
docker pushを行ってdocker indexに登録するまでの流れを実践してみた。

docker が動く Vagrant box を利用する

自分の開発環境はMac OS Xなので、
dockerリポジトリに有るVagrantfileを利用し、
Vagrant boxを利用する。

github.com/dotcloud/docker のリポジトリをgit cloneする。

> git clone https://github.com/dotcloud/docker.git
> cd docker

そのあと、vagrant up --provisionを実行する。
これでvagrantの環境が立ち上がる。

Dockerfileを作成する

Dockerfileを作成する。

HRForecastをインストールするため、
以下の環境を構築した。

  • perl-5.18を利用する
  • mysqlをインストールする
  • nginxを使ってHRForecastとのリバースプロキシとして利用する
  • mysqladminにてHRForecastが利用できるDB userを作成する
  • schema.sqlを使ってHRForecast向けのDBを作成する
  • HRForecastのconfig.plを環境に合わせた形に変える

作成したDockerfileが長い。
デバッグ用にopenssh-server入れたりしてる。

FROM centos

MAINTAINER Keiji Matsuzaki <futoase@gmail.com>

# setup network
# reference from https://github.com/dotcloud/docker/issues/1240#issuecomment-21807183
RUN echo "NETWORKING=yes" > /etc/sysconfig/network

# setup remi repository
RUN wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
RUN wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN curl -O http://rpms.famillecollet.com/RPM-GPG-KEY-remi; rpm --import RPM-GPG-KEY-remi
RUN rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

# setup nginx repository
ADD ./template/nginx.repo /etc/yum.repos.d/nginx.repo

# setup tools
# reference from http://blog.nomadscafe.jp/2013/12/centos-65dockergrowthforecast.html
RUN yum -y groupinstall --enablerepo=epel,remi "Development Tools"
RUN yum -y install --enablerepo=epel,remi pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel git ipa-gothic-fonts
RUN yum -y install --enablerepo=epel,remi mysql mysql-server mysql-devel

# install sshd
RUN yum -y install --enablerepo=epel,remi openssh-server openssh-client

# install nginx
RUN yum -y install --enablerepo=nginx nginx

# setup perlbrew
RUN export PERLBREW_ROOT=/opt/perlbrew && curl -L http://install.perlbrew.pl | bash
RUN source /opt/perlbrew/etc/bashrc && perlbrew install perl-5.18.1
RUN source /opt/perlbrew/etc/bashrc && perlbrew use perl-5.18.1 && perlbrew install-cpanm

# install HRForecast
RUN git clone https://github.com/kazeburo/HRForecast.git /root/HRForecast
RUN source /opt/perlbrew/etc/bashrc && cd /root/HRForecast && perlbrew use perl-5.18.1 && cpanm -n -lextlib --installdeps .

# setup mysql
RUN chkconfig --level 2345 mysqld on
RUN service mysqld start && mysqladmin -h localhost -u root create hrforecast
RUN service mysqld start && cd /root/HRForecast && mysql -h localhost -u root hrforecast < schema.sql
RUN service mysqld start && mysql -u root -e "GRANT CREATE, ALTER, DELETE, INSERT, UPDATE, SELECT ON hrforecast.* TO 'hrforecast'@'localhost' IDENTIFIED BY 'hrforecast';"
RUN cd /root/HRForecast && sed -i -e "s/username => ''/username => 'hrforecast'/g" config.pl
RUN cd /root/HRForecast && sed -i -e "s/password => ''/password => 'hrforecast'/g" config.pl

# nginx setup
ADD ./template/nginx.conf /etc/nginx/conf.d/hrforecast.conf
RUN rm /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/conf.d/example_ssl.conf
RUN service nginx restart

# startup
ADD ./template/iptables-setting.sh /root/iptables-setting.sh
RUN chmod +x /root/iptables-setting.sh
ADD ./startup.sh /root/startup.sh
RUN chmod +x /root/startup.sh
ENV PATH /opt/perlbrew/perls/perl-5.18.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

EXPOSE 80
CMD ["/root/startup.sh"]
CMD ["/root/startup.sh"]

これは、docker run を行った時に
/root/startup.sh というshell scriptを実行する。

Docker imageに転送するファイルを作成する

nginx yum repositoryの登録や
Docker containerを立ち上げる時にサービスを起動しなければいけない。

今回はtemplateというディレクトリを用意し、
逐次/root/ 以下にADDする形を取った。

template 参考

Docker imageをbuildする

Dockerfileがあらかたできただろ、という段階で
docker build を実行する。
ついでにリポジトリ名も設定する。

> docker build -t futoase/hrforecast .

スクリーンショット 2014-01-13 23.43.35.png

無事 docker build ができたら、
imageの動作チェックを行う。

docker runによるテスト

先ほど作成したimageをdocker runを使って起動する。

スクリーンショット 2014-01-13 23.45.37.png

Docker container IDを利用し、Docker containerに割り当てられている
IPアドレスを確認する。

> docker ps

スクリーンショット 2014-01-13 23.46.48.png

> docker inspect 0c3bf860190a

スクリーンショット 2014-01-13 23.47.28.png

wget http://172.17.0.27/ を実行し、
HRForecastのindex pageを取得出来るか確認する。

> wget http://172.17.0.27/

スクリーンショット 2014-01-13 23.48.35.png

問題なさそう。

Docker container を docker pushする

Docker Indexに futoase/hrforecast として Docker imageをpushしてみた。
以下のコマンドを実行し、docker build時にリポジトリ名を付けるようにする。
Docker IndexにSign upしていることが前提。

docker build -t futoase/hrforecast . 

その後、docker login コマンドを実行し、
dockerにログイン可能な状態にする。

スクリーンショット 2014-01-13 23.54.27.png

docker loginにて、docker pushの準備が整ったら以下のコマンドを実行すればよい。

> docker push futose/hrforecast

RUNを実行する度に差分となるimageがちょこまかと
Docker Indexにpushされていく。

しばらく待つと終わる。
(途中、失敗したら再度docker pushする)

スクリーンショット 2014-01-14 0.08.23.png

Docker Indexの自分のアカウントに対して
ページができてることを確認したら
ページ情報を更新して自己満足に浸る。

futoase/hrforecast

スクリーンショット 2014-01-14 0.11.12.png

Dockerは楽しい

Docker、Cent OSかUbuntuであれば
色々なコンテナ作れるし、楽しい。

参考にしたサイト

以下のサイト・ブログエントリがなければdocker imageは作れなかった。
なんかよくわからないし。
大変感謝しています...

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12