🚀

【Rails】最新!Rails7xMySQL8.0xDocker 環境構築

2023/05/23に公開

はじめに

今や開発環境の構築をするのに、Dockerを用いるのがあたりまえになってきたと思います。
そこで新たに環境構築をしようと思って、記事通りに実施してるのにうまくいかないという経験はないでしょうか?
バージョンやCPU(M1など)の影響で昔うまくいったけど、今はうまくいかないケースがあります。
そこで2023年版として新たに環境構築についてまとめていこうと思います。

また、今回は環境構築の手順に特化していますので、解説は最小限にしていきます。

環境

Apple M1 Pro
macOS Monterey 12.6.1
Ruby 3.1.4
Ruby on Rails 7.0.4.3
MySQL 8.0

ディレクトリ作成

mkdir rails_docker_app
cd rails_docker_app

各種ファイル作成

docker上で起動させるために必要な設定ファイルを作成・記述していきます。

設定ファイルの作成

touch {docker-compose.yml,Dockerfile,Gemfile,Gemfile.lock}

以下のような構成なっていれば大丈夫です

Dockerfile

Dockerfile
FROM ruby:3.1

RUN mkdir /app
WORKDIR /app

COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock

RUN gem update --system 3.3.20 && \
    bundle install

COPY . /app

docker-compose.yml

docker-compose.yml
version: '3'
services:
  web:
    build: .
    command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    container_name: web
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db
    tty: true
    stdin_open: true
  db:
    image: mysql:8.0
    platform: linux/amd64
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    container_name: db
    volumes:
      - db-volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      TZ: "Asia/Tokyo"
    ports:
      - "3306:3306"
volumes:
  db-volume:

Gemfile

Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 7.0', '>= 7.0.3'

コマンド実行

設定ファイルの作成は終わったので、ここからはアプリ作成のために必要なコマンドを紹介していきます。

アプリの作成

docker-compose run --rm --no-deps web rails new . --force --database=mysql --skip-bundle

DBの接続先変更

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
- password:
+ password: password
- host: localhost
+ host: db

ビルド

docker-compose build

DBの作成

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

起動確認

以上で全ての設定は完了しました。
最後にwebサイトにアクセスできるか確認していきましょう!

コンテナ起動

docker-compose up -d

起動確認

http://localhost:3000
にアクセスして、以下の画像のような画面が表示されたら成功です!!

まとめ

いかがだったでしょうか?
Docker上で起動させるための最低限の手順を紹介させていただきました。
設定ファイルの細い解説別途記事でまとめていこうと思います。

Discussion