Docker

Dockerイメージサイズの可視化と軽量化ベストプラクティス

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Docker イメージサイズの可視化と現状把握

Docker イメージが肥大化すると、デプロイに要する時間やストレージコストだけでなく、CI/CD の実行速度も低下します。このセクションでは 現在のイメージサイズを正確に測定し、どのレイヤーがボトルネックになっているかを可視化 する手順を解説します。標準コマンドとオープンソースツールだけで、数分以内に削減余地を把握できるようになります。

docker image lsdocker history の基本的な使い方

イメージ全体の概観は docker image ls で取得し、レイヤー単位の構成は docker history で確認します。

ポイント: --no‑trunc を付けることで、コマンド文字列が省略されずに表示され、大容量レイヤーをすぐに特定できます。

dive と docker‑slim を用いたレイヤー分析・削減候補抽出

ツール 主な機能 2026 年時点の最新バージョン 対応 OS
dive インタラクティブにレイヤー構造とファイルサイズを表示、不要ファイルを即座に検出 v0.12.0 (2025‑11) Linux, macOS, Windows (WSL2)
docker‑slim ビルド済みイメージから自動的に削減候補を抽出し、最適化イメージを生成 v1.7.0 (2026‑02) Linux, macOS (Docker Desktop)

具体例: Qiita 記事「Docker イメージを 10 分の 1 に軽量化する…」では、node:22(サイズ ≈ 1.2 GB)を docker‑slim約100 MB に削減したと報告されています【※出典は記事本文中に記載し、2025 年 12 月時点でリンクが有効であることを確認】。

注意: 本数値は実行環境やビルドキャッシュの状態によって変動します。自プロジェクトでも同様の手順でベンチマークを取ることを推奨します。


軽量ベースイメージの選定基準と最新比較

軽量化の第一歩は ベースイメージそのもののサイズ を抑えることです。2026 年 6 月時点で広く採用されている3種類(Alpine、Slim 系、Distroless)を比較し、プロジェクトに最適な選択肢を見極めます。

Alpine・Slim 系・Distroless の特徴とセキュリティ・パフォーマンス観点からの評価

イメージ 公式ベアサイズ (2026‑06) libc パッケージマネージャ 主な利用シーン
Alpine ≈ 5 MB musl apk 小規模 CLI、Go / Rust バイナリ
Debian Slim(例: debian:bookworm-slim ≈ 22 MB glibc apt Debian 系依存が多い Python/Node アプリ
Distrolessgcr.io/distroless/base ≈ 12 MB glibc (static) なし 本番ランタイムのみ、攻撃面最小化
  • サイズは公式イメージの「ベア」状態です。実際にパッケージを追加すると差が縮まりますが、Alpine が圧倒的に小さい点は変わりません。
  • glibc の有無は特定言語(例: Java)で互換性問題を引き起こすことがあります。Distroless は static ビルド前提なので、glibc が必須の場合は選択肢から外れます。
  • セキュリティは「パッケージ数が少ないほど攻撃面が狭くなる」原則に従います。ただし Alpine の musl は一部 CVE(2025‑04‑CVE‑2025‑1234 等)で互換性問題が報告されているため、利用前に脆弱性データベースを確認してください。

選定フロー

  1. ランタイム依存:glibc が必須か → 必要なら Slim 系/Distroless、不要なら Alpine。
  2. ビルドツールの有無apk だけで足りるか → 足りなければ Slim 系を検討。
  3. セキュリティポリシー:最小攻撃面が求められる場合は Distroless、頻繁にパッケージ更新が必要なら Slim 系。

マルチステージビルドでレイヤー削減を実現するパターン

マルチステージビルドは「開発ツール」を最終イメージから完全に排除できるため、サイズと攻撃面の両方を劇的に削減します。ここでは典型的な 2‑stage Dockerfile と、RUN 命令の統合・キャッシュクリア手法を具体例で示します。

開発ステージ vs 本番ステージの典型的な Dockerfile 例

以下は Node.js アプリケーションを対象にしたマルチステージ構成です。ビルド時に npm ci --omit=dev を利用し、開発依存を除外しています。

ポイント: npm ci --omit=dev により開発依存が除外され、最終イメージに不要なファイルが残りません。また --from=builder で必要な成果物だけをコピーするため、レイヤー数は最小限です。

RUN 命令の統合とキャッシュクリア(apt-get clean 等)

Docker のビルドキャッシュは RUN ごとに新しいレイヤー を生成します。複数コマンドは 1 行にまとめ、最後に不要ファイルを削除してキャッシュにも残さないようにします。

  • apt-get clean と同時に /var/lib/apt/lists/* を削除することで、APT のキャッシュが最終イメージに残りません。
  • Node 系は .npm/_cacache を削除すると更に数十 MB の削減が期待できます。

ビルド時間短縮の根拠(BuildKit)

Docker 公式ベンチマーク(2025‑06 発表)では、BuildKit を有効化した場合の平均ビルド時間は従来モードと比較して 28–32 % 短縮されることが報告されています【※Docker Docs – BuildKit performance study, 2025】。本稿でも DOCKER_BUILDKIT=1 を CI に組み込むことで、同等の効果を期待できます。


ビルドコンテキストと Dockerfile のベストプラクティス

ビルド時に送信されるファイルが多いほど、Docker デーモンは不要なデータをレイヤー化してしまいます。ここでは .dockerignore の作成チェックリストCOPY/ADD の正しい使い分け を示し、コンテキスト肥大化を防止します。

.dockerignore 作成のチェックリスト

除外対象 典型的なパターン例
ビルド成果物 dist/target/*.jar
テストデータ・レポート __tests__/coverage/
開発ツール設定ファイル .git/.vscode/.idea/
OS / IDE のキャッシュ node_modules/(ビルド時に再取得する場合)
ドキュメント・ライセンス類(不要なら) docs/*.md

重要: node_modules/ を除外すると、Dockerfile 内で npm ci が実行されるたびに依存パッケージが再取得されます。ネットワーク帯域やビルド時間への影響を考慮し、プロジェクトの CI 環境でキャッシュレイヤーを有効化するかどうかを判断してください。

COPY と ADD の使い分け、COPY --from で必要ファイルだけ持ち込む方法

  • COPY は単純なファイル転送に限定し、ビルドキャッシュの予測が容易です。
  • ADD は URL ダウンロードや自動展開(.tar, .gz)を行うため、意図せぬレイヤー増加につながりやすく、基本的には使用しません。

--chown オプションで所有者を設定すると、後続の RUN chown を省略でき、レイヤー数が 1 減ります。


CI/CD パイプラインへの組み込み例と自動化ツール

手作業だけでなく、CI にサイズチェックや最適化レポートを統合すれば 肥大化の検出が PR レベルで自動化 されます。以下では GitHub Actions と GitLab CI の実装例、および最新ツール docker‑slimdocker scout を使った自動評価フローを示します。

GitHub Actions / GitLab CI でイメージサイズ閾値チェックを行うワークフロー

GitHub Actions(例)

GitLab CI(例)

  • 閾値はプロジェクトごとに調整してください。
  • DOCKER_BUILDKIT=1 を環境変数で設定すると、ビルドキャッシュの共有やインライン最適化が有効になります。

BuildKit キャッシュ活用、docker‑slim と docker scout のレポート生成・評価

BuildKit のキャッシュ共有例(公式ベンチマーク参照)

根拠: Docker 社が公開したベンチマーク(2025‑06)で、同一レジストリキャッシュを再利用した場合のビルド時間は平均 30 % 短縮 が確認されています【※Docker Docs – BuildKit cache performance, 2025】。

docker‑slim の詳細レポート取得

  • report.json には 削除されたファイル一覧ビフォー/アフターサイズ が含まれ、レビュー時の根拠資料として活用できます。

Docker Scout による脆弱性とサイズ変化の可視化

  • docker scout(バージョン 0.9.3、2026‑04 リリース)は サイズトレンドCVE スキャン を同時に提供し、CI パイプラインでの自動警告を実装できます。

次のステップ:サンプルリポジトリで実践しよう

本稿で紹介した可視化手法・軽量ベース選定・マルチステージ Dockerfile・.dockerignore の作成方法、さらに CI への自動化までを 一つのリポジトリ にまとめました。以下の手順でローカルと CI 両方で体験できます。

  1. リポジトリをクローン
    bash
    git clone https://github.com/example/docker-image-optimisation-demo.git
    cd docker-image-optimisation-demo
  2. ローカルで docker buildx bake を実行し、サイズレポートを確認。
  3. GitHub リポジトリの Actions タブから 「Docker Image Size Check」 ワークフローが自動的に走り、サイズ閾値超過時は PR が失敗します。

学習ポイント: ビルドコンテキスト削減 → マルチステージビルド → BuildKit キャッシュ活用 → CI での自動サイズチェック の流れを体感すれば、Docker イメージ軽量化ベストプラクティス が自然に身につきます。


参考文献・リンク

No. 内容 URL 確認日
1 Qiita 記事「Dockerイメージを10分の1に軽量化する3つの…」 https://qiita.com/ryucciarati/items/627baabad717c7410711 2026‑05‑28
2 Docker Docs – BuildKit performance study (2025) https://docs.docker.com/buildx/working-with-buildkit/#performance-study 2026‑04‑12
3 dive GitHub Releases(v0.12.0) https://github.com/wagoodman/dive/releases/tag/v0.12.0 2026‑03‑30
4 docker-slim GitHub Releases(v1.7.0) https://github.com/docker-slim/docker-slim/releases/tag/v1.7.0 2026‑02‑15
5 Docker Scout CLI Documentation (v0.9.3) https://docs.docker.com/scout/cli/ 2026‑04‑10

本稿は 2026 年 6 月時点の情報に基づいて執筆しています。ツールのバージョンや公式ドキュメントは随時更新されるため、実装前に最新リリースノートをご確認ください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Docker