Railsの環境をDockerで作る。完全に自分のためのメモ。
設定
Docker Community Edition for Mac
安定版のStableをインストール。
Docker Hubのアカウントを作成。
コレだけ。
Docker Compose
Docker Composeがインストールされているか確認。Docker Community Edition for Macにデフォルトではいっている。
1
2
|
$ docker-compose -v
docker-compose version 1.22.0, build f46880f
|
Docker Composeは開発環境や自動テストの環境でよく使われる。まとめて色々やってくれる。
- DockerfileかDocker Hubを用意
- docker-compose.ymlを定義
- docker-compose upを実行 -dでデタッチモードで起動させる
Railsの環境をつくる
作業ディレクトリをつくる
1
2
|
$ mkdir rails
$ cd rails
|
Dockerfileを作成
rails実行環境用のイメージビルド。
1
2
3
4
5
6
7
8
|
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
|
Gemfileを作成
1
2
|
source 'https://rubygems.org'
gem 'rails', '5.2.0'
|
空のGemfile.lockを作成
docker-compose.ymlを作成
データベースはpostgresql
を使用。
portは3000。
volumesでデータの永続化を行う。コレをしないとサーバーを立ち上げるたびにデータが消える。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
|
ここまでの作業が終わったら、こんな感じになっていると思います。

railsのプロジェクトを作成
docker-composeを使ってrailsのプロジェクトを作成。
カレントディレクトリ配下で作成する場合はrails new .
--force
はファイルが存在する場合には上書きされる。
1
|
rails$ docker-compose run web rails new . --force --database=postgresql
|
rails newが終われば、いつも見慣れたヤツの出来上がり。

postgresqlが0.18だと警告が出るので書き換える。
1
2
3
|
Gemfile
gem 'pg', '>= 0.20', '< 2.0'
|
gemを更新したらbundle install
ではなく、docker-compose build
1
|
rails$ docker-compose build
|
データベース設定を追加
config/database.yml
を以下のようにする。
1
2
3
4
5
6
7
8
|
<!-- config/database.yml -->
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password:
|
起動
デタッチド・モードで起動
1
|
rails$ docker-compose up -d
|
データベースの作成
1
|
rails$ docker-compose run web rails db:create
|
コレで完成。
ローカルホストの3000にアクセス

現在起動しているコンテナを停止させたい場合は
1
|
rails$ docker-compose stop
|
See Also