Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

Docker-composeを用いたRails環境の構築

絶対忘れるのでメモ

目次

初期作業:Dockerイメージの作成

  • 作業プロジェクトの作成
$ mkdir myapp
  • Railsのイメージを作成する:Dockerfileの作成
$ vim Dockerfile
# Dockerfile
FROM ruby:2.6.3
# libpq-devはpostgresqlへの接続に必要
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev node.js   
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
# Gemのイントール。ここに記述されているので、ビルドする度に実行されることになる
RUN bundle install
# ビルドコンテキストの内容を/myappに置く      
COPY . /myapp   
  • Gemfileを作成し、Railsのバージョンを指定する
$ vim Gemfile
# Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.4'
  • 空の Gemfile.lockを作成する
    • bundle installが実行された時点で、インストールされたgemとそのバージョンのリストが書き込まれる
$ touch Gemfile.lock

初期作業:Dockerイメージのコンテナ設定(yml)

使用するコンテナの設定をdocker-compose.ymlに記述する

$ vim docker-compose.yml
# docker-compose.yml
version: '3'
services:
  db:
      image: postgres
  web:  # コンテナ名
      build: .       # ビルドコンテキストの指定
      command: bundle exec rails s -p 3000 -b '0.0.0.0'
      volumes:
          - .:/myapp
       ports:
         - "3000:3000"
       depends_on:
         - db      # このコンテナを実行する前に、dbコンテナが起動する

イメージファイルを取得し、コンテナを作成

:カレントディレクトリにrailsプロジェクトを作成

docker-compose.ymlに定義された形に従って、ホスト上のカレントディレクトリにrailsプロジェクトを作成する

$ docker-compose run web rails new . --force --database=postgresql
# --forceで事前に作成したGemfileを上書きするようにする
  • Errno::EACCES: Permission denied 権限でエラーされたら
    • 落ち着いてパーミションを確認する
$ ls -l # rootユーザで一部ファイルを作成してしまっていた
    • パーミションを現在のユーザに変更する
$ sudo chown Username 対象ファイル

ロケールの Warningが出たら、指示通りに修正する
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

# config/environment/prodiction.rb
config.i18n.fallbacks = true
->
config.i18n.fallbacks = [I18n.default_locale]

イメージを更新するために再度build

現在イメージは最初のGemfileでビルドされた状態。Gemfile(.lock)が更新されたのでイメージに反映させたい。

そのため再度buildする。
忘れそうなので注意

$ docker-compose build

RailsAppのDB設定の修正

DBの設定を修正する

# config/database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  host: db   # 追加
  username: postgres  # 追加.デフォルトユーザ
  password:    # 追加
  # 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: myapp_development
~~~

DBを作成する

$ docker-compose run web rails db:create
$ docker-compose run web rails db:migrate

ブラウザでアクセスし確認
ブラウザでlocalhost:3000にアクセス!!いつもの丘が表示!!やったね
f:id:Hitsuji_mon:20191222183811p:plain