マルチステージビルドとイメージの縮小
マルチステージDockerfileでビルドツールと最終ランタイムを分離し、イメージサイズを大幅に削減して、軽量な本番イメージを作成する方法を学びます。
「マルチステージビルドとイメージの縮小」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
イメージサイズが重要な理由
サイズの大きなイメージは、ビルド、プッシュ、プルに時間がかかり、攻撃対象領域も大きくなります。優れた設計上の目標は、アプリケーションを実行できる最小のイメージを提供することです。
肥大化の問題
アプリケーションのビルドには、コンパイラー、開発用依存関係、ビルドツールが必要になることがあります。それらが最終イメージに含まれると、実行中のアプリケーションでは必要ないにもかかわらず、イメージのサイズが大幅に増加します。
マルチステージビルドとは
マルチステージビルドでは、1つのDockerfileに複数のFROM文を記述します。前半のステージでアプリケーションをビルドし、最終ステージでは完成した成果物だけをコピーするため、ビルドツールは残りません。
ステージに名前を付ける
ASを使ってステージに名前を付けると、後続のステージから参照できます。
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci最初のステージでのビルド
ビルドステージでは、アプリケーションをコンパイルまたはバンドルします。この段階では、すべての開発用依存関係とツールを利用できます。
COPY . .
RUN npm run build軽量な最終ステージ
最終ステージは最小限のベースイメージから開始し、COPY --fromを使ってアプリケーションの実行に必要なものだけをコピーします。
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules完全なマルチステージDockerfile
ステージを組み合わせることで、ビルド済みのアプリケーションを含み、ビルドツールチェーンを含まない小さな最終イメージが生成されます。
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ['node', 'dist/main.js']小さなベースイメージの選択
ベースイメージは、サイズを左右する最大の要因になることがよくあります。Slim版やAlpine版を使うと、イメージを大幅に小さくできます。
node:20~ 大きいnode:20-slim~ かなり小さいnode:20-alpine~ 最小、ライブラリも最小限
本番用依存関係のみ
実行用イメージには開発用依存関係を含めないようにします。本番用フラグを付けてインストールすると、テスト用パッケージやビルド用パッケージを除外できます。
RUN npm ci --omit=dev.dockerignoreの使用
.dockerignoreファイルを使うと、不要なファイルをビルドコンテキストから除外できます。ビルドが高速になり、シークレットや巨大なフォルダーが誤ってコピーされるのも防げます。
node_modules
.git
.env
Dockerfile
*.log結果の測定
イメージサイズを確認して、作業結果を検証しましょう。適切に構築したマルチステージイメージは、単純な単一ステージのイメージの数分の1のサイズになることがあります。
docker images myapp理解度チェック
マルチステージビルドについて理解できたか確認しましょう。
まとめ
軽量なDockerイメージを提供する方法を学びました。
- マルチステージビルドでは、1つのDockerfileで複数の
FROMステージを使用する - 前半のステージでビルドし、
COPY --fromで成果物だけを軽量な最終ステージにコピーする - 小さなベースイメージ(SlimやAlpine)を選び、本番用の依存関係だけをインストールする
.dockerignoreを使ってビルドコンテキストを小さくする
小さなイメージは、より速くビルドでき、より迅速にデプロイでき、セキュリティも高まります。
よくある質問
「マルチステージビルドとイメージの縮小」レッスンは無料ですか?
はい。「マルチステージビルドとイメージの縮小」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「マルチステージビルドとイメージの縮小」で何を学びますか?
マルチステージDockerfileでビルドツールと最終ランタイムを分離し、イメージサイズを大幅に削減して、軽量な本番イメージを作成する方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「マルチステージビルドとイメージの縮小」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Dockerfileの理解
- カスタムDockerイメージの作成
- イメージレイヤーと最適化
- マルチステージビルドとイメージの縮小