😺
Rails 7+MySQLのDocker環境構築
DockerでRuby 3.2 + Rails 7 + MySQL 8 の開発環境を構築する方法です。
ディレクトリと必要ファイルの作成
ターミナル
mkdir rails_app
cd rails_app
# MySQLの環境
mkdir -p db/data
touch db/my.cnf db/data/.keep
# Railsの環境
mkdir api
touch api/Dockerfile api/Gemfile api/Gemfile.lock api/entrypoint.sh
touch compose.yml
各種設定ファイルの準備
compose.yml
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
TZ: "Asia/Tokyo"
volumes:
- ./db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./db/data:/var/lib/mysql
ports:
- '3306:3306'
restart: always
api:
build:
context: .
dockerfile: ./api/Dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -e development -p 3000 -b '0.0.0.0'"
volumes:
- ./api:/api
ports:
- '3000:3000'
depends_on:
- db
stdin_open: true
tty: true
my.cnf
[mysqld]
# 文字コード/照合順序の設定
character_set_server = utf8mb4
collation_server = utf8mb4_bin
# デフォルト認証プラグインの設定
default-authentication-plugin = mysql_native_password
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
api/Dockerfile
FROM ruby:3.2.2
RUN mkdir /api
WORKDIR /api
COPY ./api/Gemfile Gemfile
COPY ./api/Gemfile.lock Gemfile.lock
RUN bundle install
COPY . /api
COPY ./api/entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
api/entrypoint.sh
#!/bin/bash
set -e
rm -f /sample/tmp/pids/server.pid
exec "$@"
api/Gemfile
source 'https://rubygems.org'
gem 'rails', '~>7.0.8'
api/Gemfile.lock
# 空ファイル
Railsアプリケーションの作成
ターミナル
# apiモードで作成
docker compose run --rm api rails new . --force --no-deps --database=mysql --api --skip-test
# イメージの構築
docker compose build api
database.ymlファイル設定編集
api/config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
host: <%= ENV.fetch("MYSQL_HOST", "db") %>
development:
<<: *default
database: rails_app_development
データベースの作成
ターミナル
docker compose run --rm api rails db:create
Rails 起動
ターミナル
docker compose up -d api
http://localhost:3000/ にアクセスして以下の画面が表示されればOK
Discussion