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/

 


--------------------------
システム開発のご要望・ご相談はこちらから

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

コメントを残す

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

コメント ※

名前 ※

メール ※

サイト