Edited at

DockerでRailsの環境構築


はじめに

Railsチュートリアルをはじめました。その第1章で環境構築をしていて、チュートリアルではクラウド上の環境で実行していましたが、私は、Dockerで環境構築を行いました。

以前、Udemyの講座で勉強したのですが、正直よくわかっていなかったので、この際ちゃんと勉強したいと思い、調べた内容をまとめます。

Udemyの講座:フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座


環境

macOS Mojave 10.14.5

Ruby : 2.5.0

Rails : 5.1.6

PostgreSQL


用意するファイル

DockerでRailsの環境構築を行うために必要なのは、以下の4ファイルです。

DockerFile

docker-compose.yml
Gemfile
Gemfile.lock


ファイルの説明


DockerFile

DockerFileは、Docker上で動作するコンテナの構成情報を記述するファイルです。

ビルドすることで実行されます。

以下のように記述します。


DockerFile

# ベースとなるイメージの指定 rubyのバージョン2.5.0を指定しています

FROM ruby:2.5.0
# パッケージのインストール
RUN apt-get update -qq && apt-get install -y build-essential nodejs
# コンテナ上の作業ディレクトリの作成
RUN mkdir /app
# 作業ディレクトリの指定
WORKDIR /app
# ローカル上のファイルをコンテナ上の作業ディレクトリにコピー
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
# gemのインストール
RUN bundle install
# ローカルのファイルを全部コンテナにコピー
COPY . /app

FROMで記述した箇所でイメージのベースの指定、RUNでコマンドの実行を意味します。


docker-compose.yml

docker-compose.ymlは複数のコンテナの定義や実行手順などを記載して簡単に管理できるようにするファイルです。

以下のように記述します。


docker-compose.yml

# バージョンの指定

version: '3'
services:
# Railsのコンテナ
web:
# DockerFileのパス
build: .
# コンテナ起動時に実行されるコマンド
command: bundle exec rails s -p 3000 -b '0.0.0.0'
# ローカルとコンテナの紐付け
volumes:
- .:/app
# 公開ポート番号:コンテナ内ポート番号
ports:
- 3000:3000
# dbコンテナを先に起動する
depends_on:
- db
# デバッグ用
tty: true
stdin_open: true
# sqlite3のコンテナ
db:
# イメージの指定
image: postgres
# PC上にDBの内容を保持する設定
volumes:
- db-volume:/var/lib/postgresql
# 環境変数
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
# ポート番号
ports:
- '5432:5432'
# dbのvolumes用
volumes:
db-volume:

webのコンテナ情報とdbのコンテナ情報を記述します。


Gemfile/Gemfile.lock


Gemfile

source 'https://rubygems.org'

gem 'rails', '5.1.6'

記載はこの2行だけです。

1行目はgemのインストール元のURL、2行目はrailsとそのバージョンです。

gemのインストールをすると自動で追記されます。

Gemfile.lockは空のファイルを用意します。gemのインストールをした際に、そのインストール内容が追記されます。


コマンドの実行

以下のコマンドを実行して、railsのプロジェクトを作成します。

docker-compose run web rails new . --force --database=postgresql --skip-bundle

docker-compose run webはコンテナ上で以降のコマンドを実行することを表します。

次に、コンテナをビルドします。

docker-compose build

これで、設定等がコンテナに反映されます。

次に、データベースの設定を修正します。

修正するファイルは./config/database.ymlです。

以下のように、passwordとhostを修正します。


config/database.yml

default: &default

adapter: postgresql
encoding: unicode
host: db # コンテナのサービス名
username: postgres # docker-composeのPOSTGRES_USERと同じ内容
password: password # docker-composeのPOSTGRES_PASSWORDと同じ内容

次に、コンテナを起動します。

docker-compose up -d

以下のコマンドで、データベースを作成します。

docker-compose run web bundle exec rails db:create

これで、環境は整ったはずなので、localhost:3000でデフォルトのページにアクセスできます。

rails.png


参考

以下の方の記事がわかりやすかったです。

丁寧すぎるDocker-composeによるrails + MySQL on Dockerの環境構築(Docker for Mac)