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"}]
成功。