0Pricing
DevOps Bootcamp · レッスン

マルチステージビルドとイメージの縮小

マルチステージ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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Dockerfileの理解
  2. カスタムDockerイメージの作成
  3. イメージレイヤーと最適化
  4. マルチステージビルドとイメージの縮小
← DevOps Bootcampに戻る