Help us understand the problem. What is going on with this article?

DockerでRailsの環境構築

More than 1 year has passed since last update.

はじめに

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)

minuro
ゲーム作りやWeb系を頑張ろうと思っている初心者です Ruby on Rails/Vue.js勉強中
https://minuro.github.io/portfolio/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away