概要
Ruby on Railsの開発環境をDockerを使って簡単に構築したい。
Docker for Macのインストール
https://docs.docker.com/docker-for-mac/install/
からGet Docker for Mac [Stable]
を選択しダウンロード、インストール。
Ruby on Rails + PostgreSQLのアプリを動かす
https://docs.docker.com/compose/rails/
に従う。
プロジェクトの構成を定義
適当なプロジェクトフォルダを作ってその中にファイルを4つ作る。
FROM ruby:2.4.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
source 'https://rubygems.org'
gem 'rails', '5.1.1'
空のGemfile.lock
を作る。
version: '3'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
プロジェクトをビルド
ターミナルでプロジェクトフォルダに行き、以下を実行。
docker-compose run web rails new . --force --database=postgresql
Railsのファイルがずらっと生成される。次に以下を実行。
docker-compose build
データベースの設定
config/database.yml
のdevelopment:
の部分を以下のように変更。
development: &default
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: postgres
password:
host: db
そしてデータベースを作成。
docker-compose run web rake db:create
起動
docker-compose up
http://localhost:3000
にアクセスしてみる。Yay! You’re on Rails!
と表示されれば成功。
終了
Ctrl+C
で終了してしまうと次にdocker-compose up
で起動しようとしたときにエラーで起動できなくなることがある。tmp/pids/server.pid
が残ってしまっているのが原因なので、
rm tmp/pids/server.pid
で削除してから再びdocker-compose.up
すればいい。ただ、毎回これをやるのは面倒なので、もう一つターミナルを立ち上げ、
docker-compose down
で終了すれば余計なファイルが残ったりせず、正常に終了できる。
DBの永続化
このままだとデータベースが終了するたび毎回消えてしまうので、docker-compose.yml
を以下のように修正する。
version: '3'
services:
db:
restart: always
image: postgres
volumes:
- sql-data:/var/lib/postgresql/data
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
volumes:
sql-data:
driver: local