Refinery CMSが動作するDockerイメージの作成
Ruby on Railsで実装されたRefineryCMSをDockerを用いて動作させたい.ローカルの仮想環境で開発を行い,VPSで運用するイメージだ.Refinery CMSは Ruby on Rails CMS thatsupports Rails 4.2 - Refinery CMS で紹介されている.
仮想環境でRefinery CMSを動かすための準備
仮想環境にはrubyと関連のライブラリ等をインストールする.rubyはrbenvでインストールした.バージョンは現時点での最新版である2.3.1を使用した.
Refineryを試しに動作させるにはDownload & install Refinery Rubygem - Refinery CMS を見ると良い.
仮想環境にインストールしたのはSQLiteとImageMagic,nodejsだ.前述のサイトではexecjsをインストールしているが,nodejsでないと動かないようだ.
sudo apt-get install sqlite3 libsqlite3-dev
sudo apt-get install imagemagick
sudo apt-get install nodejs
Refineryを作成するには次のようにする.
rails new my_refinery -m http://refinerycms.com/t/3-0-
後の開発作業のため,gitのリポジトリにする(.gitignoreは最初からある).
git init
git add .
git commit -m 'Initial commit'
Dockerで動かす
このプロジェクトにRefineryを動かすためのDockerfileを作る.雛形として公開されているイメージruby:2.3.1を用いる.作成したDockerfileは次のとおりだ1 , 2 , 3 , 4.
FROM ruby:2.3.1
# Environments
ENV APP_ROOT /app_root
# Install apt packages
RUN apt-get update -qq && \
apt-get install -y nodejs --no-install-recommends && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Set up bundler
RUN echo 'gem: --no-document' > /etc/gemrc
RUN bundle config --global build.nokogiri --use-system-libraries
RUN bundle config --global jobs 4
# Use cache for bundle install
WORKDIR $APP_ROOT
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install
# Add App to WORKDIR
ADD . $APP_ROOT
# Run Server
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
最終行でrailsserverを起動するための設定.デタッチモードで実行できるようになっている.
docker run -d -p 3000:3000 ychubachi/my_refine
ログを確認する方法(コンテナ名はdocker psで確認可能).
docker logs -f $CONTAINER
停止するには次のようにする.
docker stop $CONTAINER
Docker hubへの登録
下記のコマンドでDocker Hubに登録する
docker push ychubachi/my_refinery
ychubachi/my_refineryで確認できる.
VPSでの実行
VPSにSSH接続を行い,次のようにして,DockerHubからイメージを入手し,実行する.
docker pull ychubachi/my_refinery
docker run -d -p 3000:3000 ychubachi/my_refinery
参考文献
Footnotes
1 sqlite3やImageMagicなどはすでにインストール済みなので明示的にインストールする必要はないようだ.
2 apt-getの書き方についてはDockerfileのベストプラクティス — Docker-docs-ja 1.9.0bドキュメントを参考にした.
3 bundleinstallのキャシュを用いた高速化については最速Docker研究会(DockerのTipsを20個上げていくぜ編) -Happy New Worldを参考にした.
4 このDockerfileを作成した手順は効率的に安全なDockerfile を作るには - Qiitaに近い.
- source /mnt/c/Users/yc/Dropbox/org/qiita/acae9712a57857e4dc79.org