新規RailsプロジェクトをDockerで始める手順

  • 21
    いいね
  • 0
    コメント

新規RailsプロジェクトをDockerで始めようとすると結構大変なのでまとめておきます。ここでの説明はホストマシンをMac、DockerホストをLinux仮想マシン(docker-machine必須)として進めます。

まず、dinghyをインストールして起動しておきます。

docker-compose.ymlを作る

docker-compose.yml
web:
  build: .
  command: bundle exec rails s -b '0.0.0.0'
  volumes:
    - .:/app
  environment:
    VIRTUAL_HOST: rails.docker
  links:
    - db

db:
  image: mysql:5.7
  command: >
    bash -c '
    touch /var/log/mysql/general.log &&
    chown mysql:mysql /var/log/mysql/general.log &&
    tail -f /var/log/mysql/general.log &
    /entrypoint.sh mysqld
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --general-log=true
    --general-log-file=/var/log/mysql/general.log
    '
  # /dev/stdout is not writable by mysql user. See https://github.com/docker/docker/issues/6880
  ports:
    - "3310:3306" # sequelproを使う人向け
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: app

dbのcommandはわらわらと書いてますが、クエリーログをSTDOUTに出すためにしているので、クエリーログが不要ならcommand自体をはしょってもOKです。

Dockerfileを作る

Dockerfile
FROM reoring/rails

MySQLやPostgreSQLなどRails開発に必要そうなライブラリを同梱してONBUILDにも対応したイメージを@reoringが公開しているので活用します。ありがたや。

適当なGemfileとGemfile.lockを作ります

{
  echo "source 'https://rubygems.org'"
  echo "gem 'rails', '4.2.6'"
} > Gemfile
touch Gemfile.lock

ここまででディレクトリ構成はこうなっているはずです:

$ tree .
.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
└── docker-compose.yml

Railsプロジェクトを生成する

# MySQLの場合
docker-compose run web rails new . --force --database=mysql --skip-bundle

# PosgreSQLの場合
docker-compose run web rails new . --force --database=postgresql --skip-bundle

Railsのプロジェクトが生成され、ファイル構成はこうなります:

$ tree . -L 1
.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── README.rdoc
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── docker-compose.yml
├── lib
├── log
├── public
├── test
├── tmp
└── vendor

Railsコンテナをビルドしなおす

Gemfileが出来たので改めてビルドしなおします。

docker-compose build web

DB設定を書き換える

環境変数からDB設定を受け取れるように書き換えます。

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: <%= ENV['DB_ENV_MYSQL_ROOT_PASSWORD'] %>
  host: <%= ENV['DB_PORT_3306_TCP_ADDR'] %>

development:
  <<: *default
  database: <%= ENV['DB_ENV_MYSQL_DATABASE'] %>

環境を起動する

docker-compose up

ウェブサイトにアクセスする

http://rails.docker/ を開きRailsのデフォルト画面が表示されれば完了です。

あとは忘れないうちに、生成されたRails関連のファイルをgitにチェックインしておきましょう。