ブログから移動したものです。
下記のような形でDockerfileを作成する。
FROM ruby:2.6.0-alpine3.8
ENV RAILS_ENV=production
ENV APP_ROOT /usr/src/app
ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY ${RAILS_MASTER_KEY}
WORKDIR $APP_ROOT
RUN apk add --no-cache alpine-sdk \
nodejs-current \
nodejs-npm \
yarn \
mysql-client \
mysql-dev \
python2 \
tzdata
COPY Gemfile $APP_ROOT
COPY Gemfile.lock $APP_ROOT
RUN bundle install --jobs=4
COPY . $APP_ROOT
RUN bin/yarn install
RUN bin/rails webpacker:compile
VOLUME $APP_ROOT/public
VOLUME $APP_ROOT/tmp
下記の部分がポイントとなっている。
ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY ${RAILS_MASTER_KEY}
下記のような形でCI上で環境変数をARGとして渡してやれば(CI側の環境変数にRAILS_MASTER_KEYが設定されている前提)、上記のARGにRAILS_MASTER_KEYが設定され、ENVのRAILS_MASTER_KEYにARGのRAILS_MASTER_KEYを設定することができる。これにより、イメージ作成時にRAILS_MASTER_KEYを設定した状態でビルドすることができる。
docker build --build-arg RAILS_MASTER_KEY=${RAILS_MASTER_KEY} -t app . -f Dockerfile.production
参考: