あっさりと

ソフトウェアや技術話など諸々

Dockerで開発環境構築 Ruby on Rails編

目的

気軽に使えるローカル開発環境としてDockerでRuby on Railsをセットアップしてみた。
設定ポイントや気になった事を書き留める。

後学の為にMySQLユーザー権限変更やDB文字コード指定したり環境変数ファイル切り出したりしている。

環境

作成内容はGitHubにアップしておいた。 (railsディレクトリが該当) github.com

docker-compose.yml

version: '3'
services:
  app:
    build: ./myapp
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    env_file: ./config/myapp/.env
    environment:
      TZ: "Asia/Tokyo"
    volumes:
    - ./myapp:/myapp
    ports:
    - "3000:3000"
    links:
    - db
  
  db:
    build: ./mysql
    env_file: ./config/mysql/.env
    environment:
      TZ: "Asia/Tokyo"
    volumes:
      - ./mysql/data/:/var/lib/mysql
      - ./mysql/logs/:/var/log/mysql
      - ./mysql/init/:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"

DBのアカウント情報は.envに分離してみた。
docker-entrypoint-initdb.dにMySQL追加ユーザーへのDB作成権限を付与するシェルスクリプトを共有。

Dockerfile

ruby

FROM ruby:2.5.1
ENV LANG C.UTF-8

RUN apt-get update -qq
RUN mkdir /myapp

WORKDIR /myapp

COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install

Gemfileで rails導入。

gem 'rails', '5.2.0'

utf8mb4指定

MySQL 5.7.9以上ならばデフォルト状態でutf8mb4指定可能。
5.7.9未満ならMySQL設定で必要に応じて変更する。

[参考] Rails(ActiveRecord)とMySQLでutf8mb4を扱う設定 - Qiita

シェルスクリプト

シェルで簡単立ち上げ可能。

コンテナ初期化。*1

% bash init_container.sh

Railsでmigration情報作成後に以下でサービスアップ。

% bash up_service.sh

動作確認

コンソールから適当にデータ投入してみる。

% docker-compose run --rm app rails generate scaffold user number:integer name:string

% docker-compose run app rails console   
user = User.new(number: 1, name: "Ruby on Rails")

user.save

ブラウザからアクセスする。
http://localhost:3000/users

{"id":1,"number":1,"name":"Ruby on Rails","created_at":"2018-09-08T19:02:06.000Z","updated_at":"2018-09-08T19:02:06.000Z"}]

成功。

*1:Rails API モード指定している