Rails の docker イメージを195MBに削減

docker

以下の記事を参考にし、マルチステージビルドにしたら

元々 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"]

コメント

タイトルとURLをコピーしました