Help us understand the problem. What is going on with this article?

DockerとRefinery CMS

More than 3 years have passed since last update.

Refinery CMSが動作するDockerイメージの作成

Ruby on Railsで実装されたRefinery CMSをDockerを用いて動作させたい.ローカルの仮想環境で開発を行い,VPSで運用するイメージだ.
Refinery CMSは Ruby on Rails CMS that supports Rails 4.2 - Refinery CMS で紹介されている.

仮想環境でRefinery CMSを動かすための準備

仮想環境にはrubyと関連のライブラリ等をインストールする.rubyはrbenvでインストールした.バージョンは現時点での最新版である2.3.1を使用した.

Refineryを試しに動作させるには Download & install Refinery Ruby gem - 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

Dockerfile
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"]

最終行でrails serverを起動するための設定.デタッチモードで実行できるようになっている.

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接続を行い,次のようにして,Docker Hubからイメージを入手し,実行する.

docker pull ychubachi/my_refinery
docker run -d -p 3000:3000 ychubachi/my_refinery

参考文献


  1. sqlite3やImageMagicなどはすでにインストール済みなので明示的にインストールする必要はないようだ. 

  2. apt-getの書き方についてはDockerfile のベストプラクティス — Docker-docs-ja 1.9.0b ドキュメントを参考にした. 

  3. bundle installのキャシュを用いた高速化については最速Docker研究会(DockerのTipsを20個上げていくぜ編) - Happy New Worldを参考にした. 

  4. このDockerfileを作成した手順は効率的に安全な Dockerfile を作るには - Qiitaに近い. 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away