Docker ComposeでRuby on Rails7+MySQL8環境を構築する

Docker Composeを用いた、ローカル環境下でのRails7+MySQL8.0環境構築手順を紹介します。

Rails7.1以降、Dockerfileが自動生成されるようになりましたが、この記事では初学者向けとして最低限の処理のみを記述したDockerfileを扱います。

ファイル構成

コマンド実行前の構成は以下の通りです。

project/
├ app/
│ ├ Dockerfile
│ ├ Gemfile
│ ├ Gemfile.lock
└ compose.yml

 

ファイル作成

Dockerfile

FROM ruby:3.3.0
WORKDIR /usr/src/app

COPY Gemfile Gemfile.lock ./
RUN bundle install

ベースとなるRubyイメージには執筆時点での最新Stable Versionである3.3.0を選択しています。
(RubyイメージのDocker Hubはこちら

Gemfile

source "https://rubygems.org"
gem "rails", "~> 7.1.2"

Railsのバージョン指定のみ行います。

執筆時点で最新の7.1.2としています。先述のRubyバージョンと併せて適宜書き換えてください。
(Railsのバージョンリストはこちら

Gemfile.lock

空ファイルの作成のみ行います。

compose.yml

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: passwd
    volumes:
      - mysql:/var/lib/mysql

  web:
    build: ./app
    command: bash -c "rm -f ./tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    depends_on:
      - db
    ports:
      - '3000:3000'
    volumes:
      - ./app:/usr/src/app

volumes:
  mysql:

コード内に含まれる以下の環境変数は、任意の文字列に変更してください。

  • MYSQL_ROOT_PASSWORD(MySQLにおけるrootユーザーのパスワード)

 

コマンド実行

ファイルを一通り作成したら、ターミナルから次のコマンドを実行し、Rails用のファイル群を生成します(必要に応じてオプションをつけましょう)。

docker-compose run --rm web rails new . -f -d mysql --skip-docker

生成された各種ファイルは所有者がrootになっているので、権限を変更します。

sudo chown -R $USER:$USER .

GemfileおよびGemfile.lockの変更を反映するため、buildコマンドを実行します。

docker-compose build

RailsのDB接続設定を変更します。config/database.ymlを開き、passwordとhostを入力してください。
それぞれ、compose.yml内のMYSQL_ROOT_PASSWORDおよびMySQLサービス名が該当します。

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: passwd
host: db

ファイルを保存したら、次のコマンドでRails用DBの作成を行います。

docker-compose run --rm web rails db:create

次のコマンドでコンテナを起動し、ブラウザからhttp://localhost:3000/にアクセスして動作を確認したら完了となります。

docker-compose up

-dオプションをつけることにより、バックグラウンドで実行することも可能です。

docker-compose up -d

コンテナを停止する際は以下のコマンドを実行してください。

docker-compose down

 

以上となります。ご質問等ありましたら、コメント欄にてお願いします。

コメント

タイトルとURLをコピーしました