DockerでRails+MySQLの環境を構築してみる

以前、DockerでRails + PostgreSQLの環境を作る記事を投稿したのですが、別のPCで環境を作ろうとしたらエラーが出てしまったので、PostgreSQLをMySQLに変えて再度、環境構築手順を整理しました。
基本的に下記のQiitaの記事を参考にしています。
Dockerを用いてRuby on Railsの環境構築をする方法( Docker初学者向け )
当記事はRailsが動く環境を作ることが目的の記事になります。
そのため、DockerファイルやYAMLファイルなどの設定値の解説は省略し、手順の一部簡略化を行っています。
目次
開発環境
- OS:Windows11
- Docker Desktopインストール済み
- VSCodeインストール済み
Dockerファイル作成
type nul > Dockerfile下記の内容でDockerファイルを編集。
# syntax=docker/dockerfile:1
ARG RUBY_VERSION=3.3.11
FROM ruby:${RUBY_VERSION}-slim
WORKDIR /app
RUN apt-get update -qq && \
apt-get install -y \
build-essential \
default-libmysqlclient-dev \
default-mysql-client \
libyaml-dev \
pkg-config \
git && \
rm -rf /var/lib/apt/lists/*
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
EXPOSE 3000
CMD ["bash", "-c", "rm -f tmp/pids/server.pid && bundle exec rails server -b 0.0.0.0"]
Gemfile作成
type nul > Gemfile下記の内容でGemfileを編集。
source "https://rubygems.org"
gem "rails", "~> 8.0"
gem "mysql2"
Gemfile.lock作成
type nul > Gemfile.lock
YAMLファイル作成
type nul > docker-compose.yml下記の内容でYAMLファイルを編集。
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
depends_on:
db:
condition: service_healthy
environment:
RAILS_ENV: development
DB_HOST: db
DB_NAME: odaneko
DB_USER: odaneko
DB_PASSWORD: odaneko
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails server -b 0.0.0.0"
db:
image: mysql:8.4
environment:
MYSQL_ROOT_PASSWORD: odaneko
MYSQL_DATABASE: odaneko
MYSQL_USER: odaneko
MYSQL_PASSWORD: odaneko
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-podaneko"]
interval: 5s
timeout: 5s
retries: 50
volumes:
mysql_data:
Railsプロジェクト作成
コンテナをビルド。
docker compose build --no-cachebundleインストール。
docker compose run --rm rails bundle installRailsプロジェクトを作成。
成功すると、Rails関連のフォルダ・ファイルが生成される。
docker compose run --rm app rails new . --database=mysql --force --skip-bundleプラットフォーム情報を追加。
docker compose run --rm app bundle lock --add-platform x86_64-linux
ホットリロード設定
プロジェクト作成の過程で中身が変わってしまったDockerfileを再度編集。
先ほどと同じ内容です。
# syntax=docker/dockerfile:1
ARG RUBY_VERSION=3.3.11
FROM ruby:${RUBY_VERSION}-slim
WORKDIR /app
RUN apt-get update -qq && \
apt-get install -y \
build-essential \
default-libmysqlclient-dev \
default-mysql-client \
libyaml-dev \
pkg-config \
git && \
rm -rf /var/lib/apt/lists/*
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
EXPOSE 3000
CMD ["bash", "-c", "rm -f tmp/pids/server.pid && bundle exec rails server -b 0.0.0.0"]
database.yml編集
config/database.ymlの12~22行目付近にあるDBの設定を編集。
default: &default
adapter: mysql2
encoding: utf8mb4
host: <%= ENV["DB_HOST"] %>
username: <%= ENV["DB_USER"] %>
password: <%= ENV["DB_PASSWORD"] %>
pool: 5
development:
<<: *default
database: <%= ENV["DB_NAME"] %>
コンテナ起動
コンテナビルド。
docker compose build --no-cacheコンテナ起動。
docker compose up -d
環境が構築できたか確認
下記のURLを開きます。
問題なく表示されれば、RailsとMySQLのインストールが無事完了しています。

DB疎通確認
ルーティング
Rails.application.routes.draw do
get "/db-test", to: "hello#db"
end
API(コントローラー)作成
コントローラー作成。
type null > app\controllers\hello_controller.rbDB検索して1を返すだけのAPIを作成。
class HelloController < ApplicationController
def db
result = ActiveRecord::Base.connection.execute("SELECT 1")
render json: result.to_a
end
end
下記にアクセス。
1が返ってくればOK。

以上になります。
お読み頂き、ありがとうございました。


