DockerとRefinery CMS



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

Ruby on Railsで実装されたRefineryCMSをDockerを用いて動作させたい．ローカルの仮想環境で開発を行い，VPSで運用するイメージだ．Refinery CMSは [Ruby on Rails CMS thatsupports Rails 4.2 - Refinery CMS](http://www.refinerycms.com/) で紹介されている．


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

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

Refineryを試しに動作させるには[Download & install Refinery Rubygem - Refinery CMS](http://www.refinerycms.com/download) を見ると良い．

仮想環境にインストールしたのはSQLiteとImageMagic，nodejsだ．前述のサイトではexecjsをインストールしているが，nodejsでないと動かないようだ．

```sh
sudo apt-get install sqlite3 libsqlite3-dev
sudo apt-get install imagemagick
sudo apt-get install nodejs
```

Refineryを作成するには次のようにする．

```sh
rails new my_refinery -m http://refinerycms.com/t/3-0-
```

後の開発作業のため，gitのリポジトリにする（.gitignoreは最初からある）．

```sh
git init
git add .
git commit -m 'Initial commit'
```


# Dockerで動かす

このプロジェクトにRefineryを動かすためのDockerfileを作る．雛形として公開されているイメージruby:2.3.1を用いる．作成したDockerfileは次のとおりだ<sup><a id="fnr.1" class="footref" href="#fn.1">1</a></sup> <sup>, </sup><sup><a id="fnr.2" class="footref" href="#fn.2">2</a></sup> <sup>, </sup><sup><a id="fnr.3" class="footref" href="#fn.3">3</a></sup> <sup>, </sup><sup><a id="fnr.4" class="footref" href="#fn.4">4</a></sup>．

    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を起動するための設定．デタッチモードで実行できるようになっている．

```sh
docker run -d -p 3000:3000 ychubachi/my_refine
```

ログを確認する方法（コンテナ名はdocker psで確認可能）．

```sh
docker logs -f $CONTAINER
```

停止するには次のようにする．

```sh
docker stop $CONTAINER
```


# Docker hubへの登録

下記のコマンドでDocker Hubに登録する

```sh
docker push ychubachi/my_refinery
```

[ychubachi/my\_refinery](https://hub.docker.com/r/ychubachi/my_refinery/)で確認できる．


# VPSでの実行

VPSにSSH接続を行い，次のようにして，DockerHubからイメージを入手し，実行する．

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


# 参考文献

-   [Quickstart: Compose andRails](https://docs.docker.com/compose/rails/)


# Footnotes

<sup><a id="fn.1" href="#fnr.1">1</a></sup> sqlite3やImageMagicなどはすでにインストール済みなので明示的にインストールする必要はないようだ．

<sup><a id="fn.2" href="#fnr.2">2</a></sup> apt-getの書き方については[Dockerfileのベストプラクティス &#x2014; Docker-docs-ja 1.9.0bドキュメント](http://docs.docker.jp/engine/articles/dockerfile_best-practice.html)を参考にした．

<sup><a id="fn.3" href="#fnr.3">3</a></sup> bundleinstallのキャシュを用いた高速化については[最速Docker研究会(DockerのTipsを20個上げていくぜ編) -Happy New World](http://d.hatena.ne.jp/mainyaa/20140203/p1)を参考にした．

<sup><a id="fn.4" href="#fnr.4">4</a></sup> このDockerfileを作成した手順は[効率的に安全なDockerfile を作るには - Qiita](http://qiita.com/pottava/items/452bf80e334bc1fee69a)に近い．


------
 - **source** /mnt/c/Users/yc/Dropbox/org/qiita/acae9712a57857e4dc79.org