Dark

Docker Compose で Rails 6.0.3 + Ruby 2.7.1 + PostgreSQL 環境を作る

セットアップ

まずは必要なファイルを用意します。以下の4つです。

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

Dockerfile

FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
  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 && apt-get install -y yarn
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

下記の部分でyarnをインストールしています。

RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
  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 && apt-get install -y yarn

これは、あとでwebpackerをインストールする際にyarnが必要になるからです。ただし、インストールするために単にapt-get install yarnとすると、エラーが生じました。 Dockerを使って「Rails / PostgreSQL」の開発環境を作ろう!に同様のエラーとその解決手順が記載されています。

docker-compose.yml

version: "2"
services:
  db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

下記のようにしてなんらかのパスワードを設定しておかないと、サーバを立ち上げてアクセスした際にエラーが生じました。

  db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=password

(参考: PostgreSQL(Docker)にRails(Docker)が接続できなくなったから調べてみた。(could not translate host name "db" to address: Name or service not known))

Gemfile

source 'https://rubygems.org'
gem 'rails', '6.0.3'

このGemfileはRailsを読み込むためだけの存在です。あとで上書きされます。

Gemfile.lock


空のファイルを作ります。これも同様にあとで上書きされます。

プロジェクトの構築

必要なファイルが揃ったら、以下を実行してRailsアプリを作ります。

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

完了するとカレントディレクトリにファイルが生成されます。

$ ls
Dockerfile         Rakefile           config.ru          log                test
Gemfile            app                db                 package.json       tmp
Gemfile.lock       bin                docker-compose.yml public             vendor
README.md          config             lib                storage

新しいGemfileが生成されたので、imageを再構築します。

docker-compose build

次は、config/database.ymlを以下のように書き換えます。
docker-compose.ymlで設定した"password"をパスワードとしています。

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password: password
  host: db

test:
  <<: *default
  database: myapp_test

いろいろやりましたが、まだ起動はできません。最後にwebpackerをインストールする必要があります。Dockerfileでyarnをインストールしてあるのでうまくいくはずです。

docker-compose run web rails webpacker:install 

これで準備は整いました。いよいよアプリを起動します。

docker-compose up

http://localhost:3000/にアクセスすると...

docker_rails_ruby_you_are_on_rails

😎

参考

  1. https://qiita.com/at-946/items/2fb75cec5355fad4050d
  2. https://opiyotan.hatenablog.com/entry/rails-tips-docker-development
  3. https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0
  4. http://docs.docker.jp/compose/rails.html
Share:
記事一覧
Dark