■ 結論
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"]
■ 参考