HRForecastのdocker imageを作ってみた。
dockerというものに前から興味があるので、作ってみた。
動かし方
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 <[email protected]>
# 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する形を取った。
Docker imageをbuildする
Dockerfileがあらかたできただろ、という段階で
docker build を実行する。
ついでにリポジトリ名も設定する。
> docker build -t futoase/hrforecast .
無事 docker build ができたら、
imageの動作チェックを行う。
docker runによるテスト
先ほど作成したimageをdocker run
を使って起動する。
Docker container IDを利用し、Docker containerに割り当てられている
IPアドレスを確認する。
> docker ps
> docker inspect 0c3bf860190a
wget http://172.17.0.27/ を実行し、
HRForecastのindex pageを取得出来るか確認する。
> wget http://172.17.0.27/
問題なさそう。
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にログイン可能な状態にする。
docker loginにて、docker pushの準備が整ったら以下のコマンドを実行すればよい。
> docker push futose/hrforecast
RUNを実行する度に差分となるimageがちょこまかと
Docker Indexにpushされていく。
しばらく待つと終わる。
(途中、失敗したら再度docker pushする)
Docker Indexの自分のアカウントに対して
ページができてることを確認したら
ページ情報を更新して自己満足に浸る。
Dockerは楽しい
Docker、Cent OSかUbuntuであれば
色々なコンテナ作れるし、楽しい。
参考にしたサイト
以下のサイト・ブログエントリがなければdocker imageは作れなかった。
なんかよくわからないし。
大変感謝しています...