以下の記事を参考にし、マルチステージビルドにしたら
元々 772MB だったイメージが最終的に 195MB に削減されました。
Docker のマルチステージビルドで Rails イメージを軽くする – 2021.01.31
https://zenn.dev/tatsurom/articles/multi-stage-build
最終的な Dockerfile は以下のようになりました。
ただマルチステージにしただけ(後述の postgresql-dev をそのまま)では、
772MB -> 500MB の削減でした。
さらに、ビルドステージでは必要な、postgresql-dev を、
実行ステージでは postgresql-client に変えたことにより、
500MB -> 195MB に削減できました。
今回 Rails は APIモードなので、必要な apk add が少ないというのもあるかもしれません。
FROM ruby:3.0.3-alpine as builder
ENV LANG C.UTF-8
ENV TZ=Asia/Tokyo
ENV ROOT="/app"
RUN apk update && \
apk add --no-cache \
build-base \
postgresql-dev
WORKDIR ${ROOT}
COPY Gemfile ${ROOT}
COPY Gemfile.lock ${ROOT}
RUN bundle install --jobs=4
FROM ruby:3.0.3-alpine
ENV LANG C.UTF-8
ENV TZ=Asia/Tokyo
ENV ROOT="/app"
COPY --from=builder /usr/local/bundle /usr/local/bundle
COPY . ${ROOT}
COPY config/database.yml.default ${ROOT}/config/database.yml
RUN apk update && \
apk add --no-cache \
tzdata \
postgresql-client
WORKDIR ${ROOT}
CMD ["rails", "s", "-b", "0.0.0.0"]


コメント