Dockerfileのマルチステージビルドを使ってみた

はじめに

最近、Amazon AWS の ECS 環境に React をリリースするために Dockerfile を記載しました。

その際、マルチステージビルドを使用しましたので、備忘録として残しておきたいと思います。

マルチステージビルドとは?

マルチステージビルドとは、Dockerにおけるイメージ構築方法の1つで、1つのDockerfile内で複数のステージ(`FROM` を使用するところ)を定義できる機能です。

それぞれのステージで異なる作業環境を設定し、最終的に必要な成果物だけを本番用の軽量なイメージに構築する手法を指します。

本番環境用イメージの軽量化や、開発環境と本番環境の分離を簡単に実現できるため、現在ではよく使われる技術です。

 

実際に書いてみた

参考までにDockerfileを書き出します。

# 1つ目のFROMセクション(Build Stage)
FROM public.ecr.aws/docker/library/node:20.12
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build

# 2つ目のFROMセクション(Production Stage)
FROM public.ecr.aws/nginx/nginx:1.27.3-alpine3.20-slim
WORKDIR /usr/share/nginx/html
# "0"を使って1つ目のFROMからコピー
COPY --from=0 /app/dist .

npm run build し、ビルドした結果をコピーするサンプルですので、コード量は大したことありません。

簡単に説明しますと、

1つ目のFROMセクション(1~6行目)でReactのソースをビルドし、ビルドした成果物が /app/dist に出力されます。

2つ目のFROMセクション(8~12行目)でビルドした /app/dist 以下のファイルを全て /usr/share/nginx/htmlにコピーしています。

2つ目のセクションのみが起動するため、1つ目のセクションの情報は破棄されます。

おわりに

ソースコードや環境設定ファイルを公開することなく、ビルドした成果物のみを公開することができるため、イメージの軽量化とセキュリティの向上が見込まれます。

また、リリース時のデプロイ手順を減らすこともできとても便利です。

簡単ではありますが、本記事が誰かの助けになれば幸いです。

出典:https://docs.docker.com/build/building/multi-stage/

 


--------------------------
システム開発のご要望・ご相談はこちらから
--------------------------
【この技術ブログを読んだエンジニアの皆様へ】
カサレアルブログをお読みいただき、ありがとうございます!

私たちは、常に新しい技術に挑戦し、ユーザーのニーズに応えるサービスを提供しています。
もし、当社の技術への情熱や、会社・チーム・社員の雰囲気に共感いただけたなら、
ぜひ私たちと一緒に働きませんか?
現在、株式会社カサレアルでは事業拡大に伴い、新たな仲間となるエンジニアを積極的に募集しています。

少しでも興味をお持ちいただけましたら、まずは弊社のことを知っていただけると嬉しいです。
▼採用サイト
https://www.casareal.co.jp/recruit/career
▼社員インタビュー
https://hrmos.co/pages/casareal/jobs/0000016
▼エンジニアの仲間になる! エントリーはこちらから
https://hrmos.co/pages/casareal/jobs

皆様のエントリーを心よりお待ちしています!

アジャイルな開発プロジェクト体験会を開催しました
北欧旅行に行ってきました

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

コメント ※

名前 ※

メール ※

サイト