🔰

docker-composeでRails7のローカル開発環境構築

2023/11/06に公開

概要

docker-composeを用いて、Ruby 3 + Ruby on Rails 7 のローカル開発環境を構築する方法をご紹介します。

1. プロジェクトフォルダ内に5つのファイルを作成

  • Dockerfile
  • docker-compose.yml
  • Gemfile
  • Gemfile.lock
  • entrypoint.sh

Dockerfile

# ruby3.1イメージを使用
FROM ruby:3.1

# postgeqsqlとvimをインストール
RUN apt-get update -qq && apt-get install -y postgresql-client vim

# タイムゾーンを設定
ENV TZ=Asia/Tokyo

# 作業ディレクトリを設定
WORKDIR /myapp

# ローカルのファイルをコンテナへコピー
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

# bundlerを使ってGemfileからgemをインストール
RUN bundle install

# コンテナ起動時に毎回実行されるスクリプトentrypoint.shを追加
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

# コンテナがリッスンするポート番号を設定
EXPOSE 3000

# railsを実行
CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml

version: "3.9"
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      TZ: Asia/Tokyo # タイムゾーンを設定
      POSTGRES_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp # 作業ディレクトリ
    ports:
      - "3000:3000"
    depends_on:
      - db

Gemfile

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

Gemfile.lock

空でOK

entrypoint.sh

#!/bin/bash
set -e

# Railsに潜在的に存在するserver.pidを削除
rm -f /myapp/tmp/pids/server.pid

# コンテナのメインプロセス(DockerfileでCMDと設定されているもの)を実行
exec "$@"

2. ビルド

このコマンドでディレクトリ内にファイルが生成されます。

docker compose run --no-deps web rails new . --force --database=postgresql


しかし、このように言われてしまうので

Could not find gem 'sprockets-rails' in locally installed gems.
       rails  importmap:install
Could not find gem 'sprockets-rails' in locally installed gems.
Run `bundle install` to install missing gems.
       rails  turbo:install stimulus:install
Could not find gem 'sprockets-rails' in locally installed gems.
Run `bundle install` to install missing gems.


このコマンドでまずビルドします。

docker compose build


次に、言われた通りこのコマンドを実行して

docker-compose run web rails importmap:install


さらに、このコマンドも実行します。

docker-compose run web rails turbo:install stimulus:install

3. DBを作成

config/database.ymlに追記します。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db # 追加
  username: postgres # 追加
  password: password # 追加
  # For details on connection pooling, see Rails configuration guide
  # <https://guides.rubyonrails.org/configuring.html#database-pooling>
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>


このコマンドでDBを作成します。

docker-compose run web rails db:create

4. 確認

このコマンドで立ち上げます。

docker compose up

http://localhost:3000/ でアクセスできたら成功!

Discussion