docker-compose + Rails + PostgreSQL で環境構築する
docker-compose を使って、Rails + PostgreSQL の開発環境を構築していきます。
用意するもの
Dockerfile
FROM ruby:3 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y nodejs yarn RUN mkdir /app WORKDIR /app COPY Gemfile* /app/ RUN bundle install
Ruby イメージを元に、Yarn をインストールしています。
/app
ディレクトリを作成し、ワーキングディレクトリとしています。
それから、Gemfile と Gemfile.lock をワーキングディレクトリにコピーします。
最後に、bundle install
を行い、必要なライブラリ等をインストールします。
docker-compose.yml
version: '3' services: db: image: postgres:alpine environment: POSTGRES_HOST_AUTH_METHOD: trust volumes: - db_data:/var/lib/postgresql/data rails: build: . 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 volumes: db_data:
DB サーバーと Railsサーバーを立てます。
DB サーバーは PostgreSQL を使うので、postgres:alpine
イメージを利用します。
POSTGRES_HOST_AUTH_METHOD: trust
は、パスワードなしで、PostgreSQL に接続できるようにする設定です。
データの永続化のために、ボリュームの設定も行っています。
Rails サーバーは、先述の Dockerfile をベースに作成します。
3000番ポートの開放も忘れずに行います。
Gemfile
source 'https://rubygems.org' gem 'rails', '~>6.x'
Rails を追加しておきます。
Rails のインストール
docker-compose の run コマンドで、bundle install
を行うことで、Rails をインストールします。
docker-compose run rails bundle install
Rails のプロジェクト作成
続いて、Rails プロジェクトを作成します。
rails new
を使います。
docker-compose run rails rails new . --database=postgresql --force
--database=postgresql
の部分でデータベースの種類を指定しています。
database.yml の設定
ファイルの場所は config/database.yml
にあります。
database.yml に必要な情報を追加していきます。
以下、一部抜粋です。
default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> host: db port: 5432 username: postgres
下3行を追加しています。
ホスト名、ポート番号、ユーザ名を指定しています。
ここで、ホスト名としては docker-compose.yml で設定したデータベースのサービス名とします。
(ここでは db)
その他、今回はパスワードなしで接続できるので、設定していませんが、パスワードの設定もできます。
Rails サーバー起動
まずは、docker イメージをビルドしなおします。
docker-compose build
それから、Rails が使用する DB を作成します。
docker-compose run rails rails db:create
最後に、起動します。
docker-compose up
これでサーバーが起動しました。
終わり