⛳
RailsのDockerベースイメージをalpineに変更する【image size比較】
記事の内容
Rails用のDockerifleのベースイメージをalpineに変更する
対象読者
- alpineでRails開発環境を作成したい人
環境
- mac OS
- Rails 6
- ruby 3.1
- MySQL 5.7
Rails開発環境の作り方
この記事にて、Rails + MySQLのDocker開発環境の作り方は解説済み
Dockerfile
alpine変更前
FROM ruby:3.1.0
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update -qq \
&& apt-get install -y nodejs yarn
WORKDIR /myapp
COPY Gemfile* /myapp/
RUN bundle install -j4
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
alpine変更後
FROM ruby:3.1.0-alpine3.15
WORKDIR /myapp
COPY Gemfile* /myapp/
RUN apk update && \
apk upgrade && \
apk add --no-cache linux-headers libxml2-dev make gcc libc-dev nodejs yarn tzdata bash mysql-dev && \
apk add --no-cache -t .build-packages --no-cache build-base curl-dev mysql-client && \
bundle install -j4 && \
apk del --purge .build-packages
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
変更点
- base imageを変更
-
.build-packages
というタグを付与し、bundle install
時のみに必要なパッケージは削除
メモ
- mysql-devはRailsの起動中にmysql接続に必要だが、mysql-clientは
bundle install
時に必要 - yarnはRails6より、webpackerで使用するために必要
Docker imageの容量を比べてみる
alpineを利用することでDocker imageのサイズを減らすことが可能です。
どれぐらいの減量できたかを計測しておきます。
REPOSITORY TAG SIZE
ruby-rails latest 1.12GB
alpine-ruby-rails latest 426MB
2倍以上のSIZEの違いが出ました。
軽量化のメリット
Dockerイメージの軽量化のメリット
- ビルド時間の短縮
- pull/push時の時間短縮
というものがあります。
Dockerイメージに関わる時間が短縮されることによって、CI/CDに関わる時間が短縮されるため、開発効率の向上やデプロイ改善に役立ちます。
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion