Docker | 2週間で実務レベルに到達するDocker学習:本番用Dockerfile - Day11

Docker Docker
スポンサーリンク

Day11:本番用Dockerfile(中盤)

テーマ:マルチステージビルドの“効果を体感する”——軽量化・安全性・実務メリットを深く理解する

中盤では、前半で学んだ
「ビルド用ステージ」と「本番用ステージ」を分ける意味
を、実際の動作・サイズ比較・セキュリティ観点から深掘りします。

ここを理解すると、あなたは
「なぜ本番用 Dockerfile はマルチステージが必須なのか」
を論理的に説明できるようになります。


マルチステージビルドの効果を“数字で理解する”

1. イメージサイズが劇的に小さくなる

Node.js の場合、よくある比較は次の通りです。

  • node:18(フル版)
    → 約 1GB
  • node:18-slim(軽量版)
    → 約 150MB
  • node:18-alpine(超軽量版)
    → 約 50MB

マルチステージビルドを使うと、
最終イメージを slim や alpine にできるため、サイズが 1/10 以下になることも普通 です。

なぜこんなに差が出るのか

フル版には以下が含まれます。

  • ビルドツール(gcc, make など)
  • npm のキャッシュ
  • OS の不要パッケージ
  • ドキュメント類

本番環境には不要なものばかりです。

マルチステージでは、
これらをすべて build ステージに閉じ込め、runtime ステージには持ち込まない
ため、極端に軽くなります。


セキュリティ面でのメリットを深掘りする

1. 攻撃対象(Attack Surface)が減る

本番イメージに余計なツールが残っていると、
攻撃者が悪用できる“入口”が増えます。

例:

  • curl / wget が残っている → 外部に通信される可能性
  • gcc が残っている → コンテナ内で悪意あるコードをコンパイルされる
  • npm が残っている → 任意パッケージをインストールされる

マルチステージビルドでは、
本番イメージに実行に必要な最低限のファイルしか残らない
ため、攻撃リスクが大幅に減ります。

2. 脆弱性スキャンで警告が減る

セキュリティツール(Trivy など)は、
イメージ内のパッケージをスキャンして脆弱性を検出します。

フル版イメージはパッケージが多いため、
脆弱性の数が増えやすい

slim や alpine を使うと、
パッケージ数が少ないため、
脆弱性の検出数が激減する
という実務的メリットがあります。


実際にマルチステージでビルドしたときの流れを理解する

Dockerfile(言語:Dockerfile)

# --- ビルドステージ ---
FROM node:18 AS build
WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

# --- 実行ステージ ---
FROM node:18-slim
WORKDIR /app

COPY --from=build /app /app

CMD ["node", "app.js"]
Dockerfile

ビルド時に起きていること

  1. build ステージが作られる
    • npm install
    • ソースコードコピー
    • 必要ならビルド(React など)
  2. runtime ステージが作られる
    • node:18-slim をベースにする
    • build ステージから成果物だけコピー
  3. 最終イメージは runtime ステージのみ
    → build ステージのファイルは一切残らない

つまり

“重い作業は build ステージに閉じ込め、
本番イメージは軽くて安全な状態にする”

という構造が完成します。


マルチステージビルドが実務で必須になる理由

1. CI/CD で高速化できる

GitHub Actions や GitLab CI で Docker ビルドを行う場合、
イメージが軽いほどビルド時間が短くなります。

軽いイメージ
→ プッシュ・プルが速い
→ デプロイが速い
→ コストも下がる

2. クラウド環境での起動が速い

AWS ECS / Cloud Run / Azure Container Apps などでは、
イメージサイズが小さいほど起動が速くなります。

特にサーバレス系(Cloud Run)は
起動速度=ユーザー体験
に直結します。

3. チーム開発での再現性が高い

ビルド環境と実行環境が分離されているため、
「ローカルでは動くのに本番で動かない」
という問題が激減します。


中盤まとめ

あなたがここまで理解できていれば、中盤はクリアです。

  • マルチステージビルドは 軽量化・安全性向上 に直結する
  • フル版 → slim で 1GB → 150MB など劇的に軽くなる
  • 不要なツールが残らないため 攻撃対象が減る
  • 脆弱性スキャンの警告が減る
  • CI/CD やクラウドで 高速・低コスト
  • 実務ではほぼ必須のテクニック
タイトルとURLをコピーしました