わからないなりにDockerイメージとして固めてみたものを公開しています。
https://hub.docker.com/r/kuluna/chibineko/
DockerfileもBitBucketで公開しています。
https://bitbucket.org/kuluna/docker-chibineko
chibinekoとは?
ノンプログラマーが3ヶ月でWebサービスを作ってみたで公開されているテスト支援ツールです。chibinekoいいですよね!
はじめに
このchibinekoをもっと簡単にオンプレ導入できたらなと思い今回Dockerで実行できるようにしてみました。ちなみに私のスキルですが、
- C# / Java大好き
- Dockerは最近覚えたてで、
docker pull
なら得意(ドヤァ) - Ruby?Rails? あぁ、Redmineのプラグイン入れるときに非常に苦労するアレね・・・
といったスキルセットです。RubyやRailsを書いたことはないけど、bundleとかrakeとかいうコマンドを叩くといいんだという程度です。
Dockerfile
まずは私の書いたDockerfileです。
FROM ruby:2.3.0
MAINTAINER kuluna
# Download chibineko
RUN git clone https://github.com/tabbyz/chibineko.git /opt/chibineko
# Setup
WORKDIR /opt/chibineko
RUN mv config/mailer.yml.example config/mailer.yml
RUN bundle install
RUN rake db:migrate
RUN rake db:seed
# Port
EXPOSE 3000
# Volume
VOLUME /opt/chibineko/db
# Start server
CMD rm -f /chibineko/tmp/pids/server.pid;rails server -b 0.0.0.0
FROM
FROMはベースとなるDockerのイメージです。chibinekoのソースを見たところrubyで書かれていたので、ここでは初めからrubyの環境が揃っているイメージを利用しています。
rubyのバージョンを2.3.0と指定していますが、これはchibinekoソース内のGemfile
を見たところruby '2.3.0'
と書かれていたのでそのバージョンに合わせました。
MAINTAINER
Dockerfileを管理している人の名前を入力するのがDockerfileを書く上でのマナーのようです。(実行には影響ありません)
RUN
RUNは続く文字列をコマンドとして実行してくれます。ここではgit cloneでchibinekoのソースをダウンロードしています。
WORKDIR
ダウンロードしたソースのルートディレクトリに移動しています。
RUN cd /opt/chibineko
だとその時はcdしてくれるのですが、次のRUNでまた元に戻ってしまうようです。cdではなくWORKDIRを使うところはハマりやすそうな気がします。
怒涛のRUNコマンド
このあたりはchibinekoのREADME.md
にあったコマンドを順次実行している感じです。
rake db:migrate RAILS_ENV=production
とやるとエラーが出てしまいました。よくわからんのでつけずに実行しています。
EXPOSE
開放する(?)ポート番号を指定しています。これを指定するとPCとDocker内のイメージで指定したポート番号と通信することができるようになるようです。Railsサーバーを起動したときに3000番でWebサーバーが立ち上がりましたので3000番を書いています。
VOLUME
いまいちよくわかっていないDocker volumeです。イメージとしては指定したディレクトリをPCがマウントできるようにする感じでしょうか。
Dockerイメージが壊れたりバージョンアップをしたときにイメージ内にデータを残すやり方にしているとその時に一緒にデータも葬り去ってしまうので、このように書くとデータを退避できるという使い方をするようです。
chibinekoソース内のconfig/database.yml
にsqliteの保存先が書かれてたのでそのディレクトリをVOLUMEとして指定しています。この使い方であってるんでしょうか・・・?
CMD
Dockerイメージが起動できたときに自動的に実行してくれるようです。rails server -b 0.0.0.0
でサーバーを起動させています。
その前にserver.pid
を削除していますが、これはdocker stop -> docker startとしたときにこのファイルがあるためrails serverができなかったということがありました。なので先にファイルを消す処理をしています。
実行
このDockerfileをローカルでビルドし、実行することでchibinekoが起動します。
docker build -t kuluna/chibineko:latest {Dockerfileのあるディレクトリ}
docker run -d -p 3000:3000 kuluna/chibineko
一応stopしたりもう一度startしてもデータが永続化していたところまでは確認しました。
さいごに
わかんないことなりに調べて3時間ぐらいでDockerfileができあがりました。
もちろんchibineko自身が少ないコマンド数で実行できるようになっているのが素晴らしいのですが!
Dockerfileの書き方が間違ってたり、こうしたほうがいいというのありましたら連絡いただけると助かります。