■ 結論

Before = 1.35GB

After = 855MB

■ 今回の修正ポイント

  • multi-stage-buildでnode/yarnを切り出す
  • rubyをalpineに変更

■ 修正内容

FROM ruby:2.7.0

ENV LANG C.UTF-8

RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       libpq-dev \
                       nodejs \
                       yarn
    && rm -rf /var/lib/apt/lists/*

RUN mkdir /robo_scout_server
ENV APP_ROOT /robo_scout_server
WORKDIR $APP_ROOT

ADD ./src/Gemfile $APP_ROOT/Gemfile
ADD ./src/Gemfile.lock $APP_ROOT/Gemfile.lock

RUN bundle install
ADD ./src/ $APP_ROOT

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

CMD ["rails", "s", "-p", "80", "-b", "0.0.0.0"]
#Node.js & Yarn
FROM node:13.5-alpine as node

RUN apk add --no-cache bash curl && \
    curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.21.1

# Ruby & Bundler
FROM ruby:2.7.0-alpine
ENV LANG=ja_JP.UTF-8

COPY --from=node /usr/local/bin/node /usr/local/bin/node
COPY --from=node /opt/yarn-* /opt/yarn
RUN ln -fs /opt/yarn/bin/yarn /usr/local/bin/yarn

RUN apk add --no-cache git build-base libxml2-dev libxslt-dev mariadb-dev mysql-client tzdata bash less && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    gem update --system && \
    gem install --no-document bundler:2.1.4

ENV APP_ROOT /robo_scout_server
RUN mkdir /robo_scout_server
WORKDIR $APP_ROOT

ADD ./src/ $APP_ROOT
RUN bundle install && \
    DB_ADAPTER=nulldb bundle exec rake assets:precompile

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

CMD ["rails", "s", "-p", "80", "-b", "0.0.0.0"]

■ 参考