DockerでRails+別コンテナのMySQLの環境を構築してみる(Windows)

開発環境

  • OS:Windows11
  • Docker Desktopインストール済み
  • VSCodeインストール済み

MySQLは下記の記事で構築した別プロジェクト自体のコンテナ上で動いているものになります。

Dockerファイルを作成する

下記のコマンドを実行し、Dockerファイルを作成します。
エラーメッセージが表示されますが、Dockerファイルが作成されていれば問題ありません。

type nul > Dockerfile

下記の内容でDockerファイルを編集します。

FROM ruby:3.3

WORKDIR /service

# GemfileとGemfile.lockファイルを
# イメージのserviceディレクトリ内にコピー
COPY Gemfile* /service/

RUN bundle install

EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

Gemfileを作成する

下記のコマンドを実行し、Gemfileを作成します。
エラーメッセージが表示されますが、Gemfileが作成されていれば問題ありません。

type nul > Gemfile

下記の内容でGemfileを編集します。

source 'https://rubygems.org'
gem 'rails', '~> 7.1.3'

Gemfile.lockを作成する

下記のコマンドを実行し、Gemfile.lockを作成します。
エラーメッセージが表示されますが、Gemfile.lockが作成されていれば問題ありません。
このファイルは編集不要です。

type nul > Gemfile.lock

YAMLファイルを作成する

下記のコマンドを実行し、YAMLファイルを作成します。
エラーメッセージが表示されますが、YAMLが作成されていれば問題ありません。

type nul > docker-compose.yml

下記の内容でYAMLファイルを編集します。

services:
  web:
    build: .
    ports:
      - '3000:3000'
    environment:
      MYSQL_HOST: db
      MYSQL_USER: odaneko
      MYSQL_PASSWORD: odaneko
    volumes:
      - type: bind
        source: ./service
        target: /service
    networks:
      - mysql_default

networks:
  mysql_default:
    external: true

コンテナをビルド

下記のコマンドを実行して、コンテナをビルドします。

docker compose build

Railsプロジェクトを作成する

下記のコマンドを実行して、Railsプロジェクトを作成します。

docker compose run web rails new . --database=mysql

serviceフォルダ配下のGemfile、Gemfile.lockをカレントディレクトリにコピペします。

copy service\Gemfile Gemfile
copy service\Gemfile.lock Gemfile.lock

DB設定

config/database.ymlを編集します。
ポイントはhostがコンテナ名となっていることです。
コンテナ名やユーザー、パスワード、データベース名は各自のMySQLの環境に合わせてください。

  username: odaneko
  password: odaneko
  host: db

  database: odaneko

コンテナを起動する

下記のコマンドを実行して、コンテナを起動します。

docker compose up -d --build

Docker上でも起動していることを確認します。

環境が構築できたか確認

下記のURLを開きます。
http://localhost:3000/
問題なく表示されれば、環境構築が無事完了しています。

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