🔰
docker-composeでRails7のローカル開発環境構築
概要
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