Rails 5.2 + Docker, RAILS_MASTER_KEYをイメージ作成時に動的に入れる方法

下記のような形で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  

参考:

[https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39:title]

[https://qiita.com/nacika_ins/items/cf8ceb20711bd077f770:title]