はじめに
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上で動作するコンテナの構成情報を記述するファイルです。
ビルドすることで実行されます。
以下のように記述します。
# ベースとなるイメージの指定 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は複数のコンテナの定義や実行手順などを記載して簡単に管理できるようにするファイルです。
以下のように記述します。
# バージョンの指定
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
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を修正します。
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
でデフォルトのページにアクセスできます。
参考
以下の方の記事がわかりやすかったです。
丁寧すぎるDocker-composeによるrails + MySQL on Dockerの環境構築(Docker for Mac)