要件
- ruby 2.7.4
- Rails 6.1.4
- redis latest
- PostgreSQL 12.2
- nginx 1.20
開発環境
- macOS Big Sur
- VSCode
- Docker Desktop
VSCode プラグイン
Docker 環境
- 以下リポジトリに完成した docker-compose.yml 等を格納
コンテナの構成
- app
- rails 6.1.4 が稼働する
- ポート番号 3000 で listen
- web
- nginx 1.20 が稼働する
- ポート番号 80 で listen
- 受け取ったリクエストを app コンテナに渡す
- pgsql
- PostgreSQL 12.2 が稼働する
- ポート番号 5432 で listen
- rredis
- redis が稼働する
- ポート番号 6379 で listen
- rmail
- mailhog が稼働する
- ポート番号 1025 でメールを listen
- ポート番号 8025 で HTTP リクエストを listen
使い方
-
前提として、make コマンドを実行できるようにしておくこと
- 不可能な場合は、Makefile 内の各コマンドをコピペして実行すれば OK
-
初回 (Rails プロジェクトを作成する)
$ git clone git@github.com:soso555BoBs/env-rails.git $ cd env-rails $ make create-project # Install Rails project
- 上記実行後 http://localhost:3000/ で動作確認
- 以下の手順を全て行うので時間がかかります
- rails インストール
- build docker image
- docker container up
- bundle install
- webpacker install
- rake db:create
- container restart
-
初回 (既存プロジェクトをインポートする)
$ git clone git@github.com:soso555BoBs/env-rails.git $ cd env-rails $ git clone git@github.com:hogehoge/rails.git ./backend # Clone any project to the backend directory $ make init $ make up
-
2 回目以降
$ make up
-
コンテナ終了
$ make down
詰まった点
-
bundle install
した gem がコンテナを立ち上げる度に無くなる- gem がインストールされたディレクトリを永続化していないため
-
永続化するために docker-compose.yml に以下記述を追加
volumes: bundle-store: : : services: app: volumes: - type: volume source: bundle-store target: /usr/local/bundle nocopy: true
-
nocopy: true
のせいで、永続化しても更新されないためnocopy: true
を削除 -
docker-compose run
と build と up のタイミングに依り volume の内容に不整合が発生。以下記事により解決しました。
-
-
- gem がインストールされたディレクトリを永続化していないため
-
rails server
実行時にWebpacker configuration file not found
エラーが発生する- bundle install の後に webpacker install を実行することで対応
所感
- 実は「コンテナの構成」には嘘が書かれている。実装できていないので追々実装する。
- volume の永続化の解決にものすごく苦労した。
- きちんとオプションや記述形式を把握しない限りはコピペなんてするもんじゃない。
- おかげで volume 周りの挙動について勉強になった
- ひとまずこの環境を用いて転職活動アプリを作っていこうと思います。