5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker + Rails7

Last updated at Posted at 2022-02-21

Docker で Rails7 の環境を作ったときのメモ。

(2024/10/09 追記)
Rails のバージョンを 7.2 に更新

環境

  • WSL2
  • Ruby 3.4.4
  • Ruby on Rails 7.2.1
  • PostgreSQL 16.2
  • Docker 27.2.0

用意するファイル

Gemfile.lock は空のファイルを用意する。

Rails 7.2 からは Dockerfile が production 用のものに上書きされてしまうので注意。
再度自分で作ったものを上書きしなおすか、Rails の出力したものを使うかする。

自分の開発環境用の Docker なので compose.yaml に RAILS_ENV: development を入れているが、普通は不要。

Dockerfile
FROM ruby:3.3.4

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -\
    && echo 'deb http://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list

RUN curl -sL https://deb.nodesource.com/setup_20.x | bash -
RUN apt update -qq && apt install -y nodejs build-essential postgresql-client yarn \
    curl dirmngr apt-transport-https lsb-release ca-certificates

ENV APP_ROOT /app
RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}
ADD ./Gemfile ${APP_ROOT}/Gemfile
ADD ./Gemfile.lock ${APP_ROOT}/Gemfile.lock

RUN bundle install

ADD . ${APP_ROOT}
Gemfile
source 'https://rubygems.org'
gem 'rails'
Gemfile.lock
compose.yaml
services:
  db:
    image: postgres:16.2
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
  web:
    build: .
    environment:
      RAILS_ENV: development
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app
    ports:
      - '3000:3000'
    depends_on:
      - db

Rails アプリ作成

docker compose build
docker compose run --rm --no-deps web rails new . --force -d=postgresql

database.yml 編集

host, username, password の 3 行を追加する。

config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db           # 追加
  username: postgres # 追加(docker-compose.ymlに設定したのと同じ値にする)
  password: postgres # 追加(docker-compose.ymlに設定したのと同じ値にする)
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

bundle install

DB を作成しようとしたら Run `bundle install` to install missing gems. というエラーが出るので、もう一度 build する。
こととき Dockerfile が Rails によって上書きされてしまっているので、再度自分で「用意するファイル」のところにある内容で上書きしなおしたあとに build する。

docker compose build

DB 作成

bin/rails としないと rails コマンドが見つからないというエラーが出ます。

docker compose run --rm web bin/rails db:prepare

起動

docker compose up -d
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?