RUN \
if [ "$RAILS_ENV" != "development" -a "$RAILS_ENV" != "" ] ; then \
apk del --purge .build; \
fi
.....
.....
.....
RUN \
if [ "$RAILS_ENV" != "development" -a "$RAILS_ENV" != "" ] ; then \
yarn build:css; \
bundle exec rails assets:precompile --trace; \
fi
~ slidict.ioで使用しているdockerコンテナ構成 ~
Docker Image
alpineはパッケージを追加しても軽量で抑えられるため使っています。 クラウドでコンテナレジストリの容量に気を遣う場面も多いのも理由です。
code
上記は、 railsの軌道に最低限必要なDockerfileです。 利用する上での注意する点、知っておいたほうが良い点があります。
rails_helper.rbの修正
docker-composeなどで環境が指定できるようにします。
上記方法だけだとtestを走らせたときに支障が出てきます。そのため以下のような修正をrails_helper.rbに行う必要が出てきます。
multi-stage build
multi-stage buildを使用してdocker buildの時間を短縮するようにしています。docker build単体ではmulti-stage buildを使用する必要がありませんが、docker buildxを使用するときに必要になってきます。
bundle install
docker build時にbundle installするようにしています。path を vendor/bundle 配下にしているのは、docker-compose 実行時にホスト側で見れるようにするためです。
開発環境別スクリプト
development環境では、新たにbundleを追加する場面があるのでビルドパッケージをインストールしています。また開発環境以外ではアセットのコンパイルをするようにしています(開発環境では後述のentrypoint.shでアセットのコンパイルなどをしています。
entrypoint
entrypoint.shを独自に作成して起動時に実行するようにしています。想定では開発環境以外で実行され、開発環境ではdocker-compose.ymlで開発環境用のentrypoint.shが実行されます。
entrypoint.sh
Dockerが立ち上がった際のentrypointを指定します。pumactlでrailsを立ち上げてます。
docker-compose.yml
開発環境用のdocker-compose.shです。
entrypoint.local.sh
docker-compose実行に使用する開発環境用のentrypoint用のファイルです