[Docker] Rails API+PostgreSQLの環境構築メモ

DockerでRails API+PostgreSQLの環境構築メモ

目的

初めてDockerで環境構築を行ったときの構築手順のメモです。

環境

Laptop: Windows 10 Pro
Docker: Docker for Windows

方針

  • Ruby on Railsではバックエンド用に--apiで構築。localhost:3000で立ち上げる。
  • データベースはPostgreSQLを使用。

構成

初期のファイル構成です。ローカル環境にprojectappフォルダ、その中にサーバーサイド用のフォルダapiを作ります。各ファイルについて順番に見ていきます。

projectapp
|-- docker-compose.yml
|-- api
    |-- Gemfile
    |-- Gemfile.lock
    |-- Dockerfile

Rails + PostgreSQLの構築

(参考)

Ruby on Railsのコンテナを作成するためのDockerfileを作ります。

FROM ruby:2.5

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 

RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

Gemfileを作ります。後ほどrails newで上書きされます。

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

Gemfile.lockを作る。中は空白。次はdocker-compose.ymlを作成します。

version: '3'
services:
  api:
    build: ./api
    ports:
      - '3000:3000'
    command: /bin/sh -c "rm -f /myapp/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 
    volumes:
      - ./api:/myapp
    depends_on:
      - db
  db:
    image: postgres
    volumes:
      - dbdata:/var/lib/postgresql/data
    ports: 
      - '5432:5432'

volumes:
  dbdata:

データサーバ用に永続化したDocker volumeをビルドします。
servicesで指定したapiのDokerfileに記載した順に従いrubyのimageをビルド、ローカルのGemfile, Gemfile.lockをコンテナにコピーし、コンテナ上にrails newでrailsプロジェクトを作成します。

docker-compose run api rails new . --api --force --skip-bundle --database=postgresql

次に、config/database.ymlのdefault部分を変更します。

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

development:
  <<: *default
  database: postgres 
  username: postgres 
  password:
  host: db

Railsがpostgresサーバに接続できるように設定変更ができたので、docker-composeでapiとdbをビルド・起動します。

# コンテナをビルド
$ docker-compose build

# コンテナの作成&起動(バックグラウンド)
$ docker-compose up -d

うまく起動したらlocalhost:3000に接続できます。

下記でログが見られます。

$ docker-compose logs -f api

まとめ

構築した後のファイル構成を示します。

projectapp
|-- docker-compose.yml
|-- api
    |-- app
    |-- bin
    |-- config
    |-- db
    |-- lib
    |-- log
    |-- public
    |-- test
    |-- tmp
    |-- vender
    |-- .gitignore
    |-- config.ru
    |-- Gemfile
    |-- Gemfile.lock
    |-- Dockerfile
    |-- Rakefile
    |-- README.md
    |-- Gemfile
    |-- Gemfile.lock
    |-- Dockerfile

フロントサイドとしてReact用を追加した場合は、次の記事に続きを書きました。

1 Comment

  1. […] 前回はDocker上でRails API+PostgreSQLの環境構築を行ったので、今回はその続きでReactでのフロントエンドもdocker-composeに追加しました。 […]

    返信

コメントを残す

Scroll to top