Docker Composeを用いた、ローカル環境下でのRails7+MySQL8.0環境構築手順を紹介します。
Rails7.1以降、Dockerfileが自動生成されるようになりましたが、この記事では初学者向けとして最低限の処理のみを記述したDockerfileを扱います。
ファイル構成
コマンド実行前の構成は以下の通りです。
├ 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
以上となります。ご質問等ありましたら、コメント欄にてお願いします。
コメント