新規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にチェックインしておきましょう。