以下の記事を参考にし、マルチステージビルドにしたら
元々 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"]
コメント