Rails
Docker
docker-compose

Railsをdocker-composeで動かす

More than 1 year has passed since last update.

フロントエンドやマークアップ担当の人が中々バックエンドが動く環境作ってくれなかったので導入しました。環境作ってくれないと確認やら何やらでいちいちこっちに聞きに来るので、時間が無くなったりフロントエンドのコーディングまでついでにやらきゃならなかったりするので。


前提

dockerについての基本的なことは省略します。

ちなみに複数環境扱うような受託開発系エンジニアはdocker使うとものすごい楽です。

自分はrailsやlaravelやnodejsやらを各プロジェクトで切り替えてました。プロジェクト毎にmysqlやpostgres切り替えたり、同じlaravelのプロジェクトでもphpのバージョン違ったりmysqlのバージョン違ったりして死にそうになります。

phpenvやrbenvなどで管理できるとは言っても限界があったので。。。

それがdocker-compose使うと、compose用の設定ファイルがあるところでdocker-compose upするだけでよくなる。

涙が出ました。


やりたいこと

既存のRailsプロジェクトをdocker-composeで動くようにしたい。

そのための設定メモ。

laravelにはlaradockというのがあったんですが、railsには良さげなのがなかったです。

必要で色々調べたんですが、(半年くらい前は)中々日本語の記事が無かったので各項目が何を指すか残しておこうと思います。


ディレクトリ構成

    -myproject/ #プロジェクトのルートディレクトリ

- docker-compose.yml
- Dockerfile-rails
- Gemfile
- Gemfile.lock
~~~
railsのソースコード


・docker-compose.yml

composeでまとめてコンテナを起動するための設定ファイル


・Dockerfile-rails

rails用イメージ作成に使う


Dockerfileを作る


FROM ruby:2.3.1
RUN apt-get update && \
apt-get install -y mysql-client nodejs --no-install-recommends && \
rm -rf /var/lib/apt/lists/*

RUN mkdir /myproject

WORKDIR /myproject

ADD Gemfile /myproject/Gemfile
ADD Gemfile.lock /myproject/Gemfile.lock

RUN gem install bundler
RUN bundle install

ADD . /myproject

railsのイメージを作ってます。

railsのバージョン変えたい場合は

FROM ruby:2.3.1 のバージョンを変更。

RUN apt-get〜 は作成するrails用イメージに必要なものをインストール。他に必要があればここに書き足す。

RUN mkdir /myproject 以下はディレクトリを作成した後

同階層にあるGemfileをdockerのイメージに移動。

イメージにGemをインストールしている。


docker-composeの設定

設定ファイルの中身。各項目の説明はコメントで


docker-compose.yml

#docker-composeのバージョン

version: '2'

#ここにdocker-composeコマンドで起動するコンテナとその設定を記載する
services:

#コンテナ名
db:
#以下、コンテナ内で使用する設定

#使用するdocker image
image: mysql:5.6

#環境変数
environment:
- MYSQL_DATABASE=xxxxx
- MYSQL_USER= xxxxx
- MYSQL_PASSWORD= xxxxx
- MYSQL_ROOT_PASSWORD= xxxxx

#コンテナがマウントするディレクトリ
#mysqlのファイルをローカルディレクトリに保存するようにしている
#これを記載しないとコンテナを落とす度にデータが初期化されるので注意
volumes:
- ./mysql/volumes:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d

#使用するポート番号
ports:
- "3306:3306"

#コンテナ名(rails用のコンテナ)
application:
#既存のdocker imageではなく、dockerfileを元にbuildする
build:
context: .
#imageをbuildする際に使用するdockerfile
dockerfile: Dockerfile-rails

environment:
RAILS_ENV: development

#起動時に実行するコマンド
#ここでは起動時にrailsサーバーを立ち上げている
command: bundle exec rails s -p 3000 -b '0.0.0.0'

#dockerと同階層に既存のrailsプロジェクトが展開されているため、それを参照する設定
volumes:
- .:/application
ports:
- "3000:3000"

#このコンテナが依存するコンテナ
#railsでmysqlを使用するためdbコンテナを参照する
depends_on:
- db



起動する

docker-compose.ymlがあるところで

docker-compose up -d


終了する

docker-compose.ymlがあるところで

docker-compose down


終わり

以上、各種設定項目のメモでした。

他の環境でもymlの項目の値や、dockerfileをいじれば対応できそう。