Docker-composeを用いたRails環境の構築
絶対忘れるのでメモ
目次
- 目次
- 初期作業:Dockerイメージの作成
- 初期作業:Dockerイメージのコンテナ設定(yml)
- イメージファイルを取得し、コンテナを作成
- イメージを更新するために再度build
- RailsAppのDB設定の修正
- DBを作成する
- ブラウザでアクセスし確認
初期作業:Dockerイメージの作成
- 作業プロジェクトの作成
$ mkdir myapp
- Railsのイメージを作成する:Dockerfileの作成
- データベースはPostgreSQLを用いる
$ 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コンテナが起動する
イメージファイルを取得し、コンテナを作成
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.
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