コンテナイメージに含まれるパッケージの脆弱性を見逃すと、本番環境での情報漏洩やサービス停止につながりかねません。Docker Scoutは、Dockerワークフローにネイティブ統合された脆弱性管理ツールで、イメージ内の全パッケージを可視化し、既知のCVEを検出・優先順位付けする機能を備えています。

Docker Scoutの概要 — 何ができるツールなのか

Docker Scoutは、Docker社が提供するソフトウェアサプライチェーンセキュリティツールです。コンテナイメージのSBOM(Software Bill of Materials)を自動生成し、23の脆弱性データベースと照合することで、イメージ内のセキュリティリスクを検出します。

従来のDockerでは脆弱性スキャンにSnykベースのdocker scanコマンドが使われていましたが、APIレート制限(月100回まで)やDocker外部サービスへの依存が課題でした。2023年にDocker Scoutがこれを置き換え、Docker Desktop・Docker Hub・CLIにネイティブ統合されたことで、追加のアカウント登録やAPIキー取得なしに脆弱性スキャンを実行できるようになっています。

Docker Scoutの主な機能は以下の5つです。

機能概要
脆弱性スキャンイメージ内パッケージのCVEを検出し、重大度別に分類
SBOM生成SPDX形式でソフトウェア部品表を出力
ポリシー評価9種類のセキュリティポリシーへの準拠状況を自動判定
Health Scoreイメージのセキュリティ品質をA〜Fの6段階で評価
修正提案ベースイメージの更新やパッケージアップグレードを具体的に提示

脆弱性データベースの仕組み

Docker Scoutは単一のデータベースに依存せず、NVD(National Vulnerability Database)、GitHub Advisory Database、各Linuxディストリビューションのセキュリティトラッカーなど、23のデータソースを集約しています(出典: Docker Docs)。

マッチング方式にはPackage URLs(PURLs)を採用しており、従来のCPE(Common Platform Enumeration)方式と比べて誤検知が少ない点が特徴です。また、CVSSスコアはv4を優先し、ベンダー固有のアドバイザリがNISTスコアリングより優先される設計になっています。

Docker Scoutの導入手順

Docker Scoutの利用方法は環境に応じて3つあります。

Docker Desktop経由(最も手軽)

Docker Desktop 4.17以降にはDocker Scout CLIがプリインストールされています。Docker Desktopをインストール済みであれば追加の設定なしにすぐ利用可能です。

# バージョン確認
docker scout version

CLIプラグインの手動インストール

Docker Desktopを使わない環境(CI/CDサーバーやLinuxサーバーなど)では、インストールスクリプトで導入します。

# インストールスクリプトの実行
curl -fsSL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh -o install-scout.sh
sh install-scout.sh

OS別の手動インストールも可能です。

Linux(x86_64)の場合:

# 最新バージョンを取得してインストール
mkdir -p $HOME/.docker/cli-plugins
curl -fsSL https://github.com/docker/scout-cli/releases/latest/download/docker-scout_linux_amd64.tar.gz \
  | tar -xzf - -C $HOME/.docker/cli-plugins
chmod +x $HOME/.docker/cli-plugins/docker-scout

macOS(Apple Silicon)の場合:

mkdir -p $HOME/.docker/cli-plugins
curl -fsSL https://github.com/docker/scout-cli/releases/latest/download/docker-scout_darwin_arm64.tar.gz \
  | tar -xzf - -C $HOME/.docker/cli-plugins
chmod +x $HOME/.docker/cli-plugins/docker-scout

GitHub Actionsでの利用

CI/CDパイプラインではDocker公式のGitHub Actionが利用できます。詳細は後述の「CI/CDパイプラインとの統合」セクションで解説します。

CLIコマンドの実践ガイド

Docker Scout CLIには用途別のサブコマンドが用意されています。ここでは実務で頻繁に使う5つのコマンドを具体的な実行例とともに紹介します。

docker scout quickview — イメージの概要を素早く把握

quickviewはイメージの脆弱性サマリーを一覧表示するコマンドです。詳細な分析の前にまず全体像を確認する用途に適しています。

docker scout quickview myapp:latest

出力例:

docker scout quickview の出力例 — Target と Base image ごとの脆弱性サマリー(Critical/High/Medium/Low)

C(Critical)、H(High)、M(Medium)、L(Low)の4段階で脆弱性が表示されます。Base imageの行を見ることで、自分のアプリケーションコードが追加した脆弱性と、ベースイメージ由来の脆弱性を区別できます。

docker scout cves — CVEの詳細一覧を取得

cvesは検出されたCVEの詳細を一覧表示するコマンドです。

# 全CVEを表示
docker scout cves myapp:latest

# Critical/Highのみ表示
docker scout cves myapp:latest --only-severity critical,high

# CIで使用(Critical/Highがある場合に終了コード1を返す)
docker scout cves myapp:latest --exit-code --only-severity critical,high

出力にはCVE ID、CVSSスコア、影響を受けるパッケージ名、修正済みバージョンが含まれます。--exit-codeフラグを付けるとCI/CDパイプラインで脆弱性検出時にビルドを自動的に失敗させることが可能です。

docker scout sbom — SBOM(ソフトウェア部品表)の生成

SBOM(Software Bill of Materials)は、イメージに含まれる全パッケージとその依存関係を一覧化したドキュメントです。経済産業省も「ソフトウェア管理に向けたSBOMの導入に関する手引」を公開しており、サプライチェーンセキュリティの観点で重要性が高まっています。

# SPDX形式でSBOMを生成
docker scout sbom --format spdx myapp:latest

# 人間が読みやすいリスト形式で表示
docker scout sbom --format list myapp:latest

# ファイルに出力
docker scout sbom --format spdx myapp:latest > sbom.spdx.json

ビルド時にSBOMをイメージに直接埋め込むことも可能です。

docker build --tag myorg/myapp:latest \
  --attest type=sbom,generator=docker/scout-sbom-indexer:latest \
  --push .

この方法で生成したSBOMはDocker Scout以外のツール(OSV Scanner、Grypeなど)でも利用でき、脆弱性情報の二次的な分析に活用できます。

docker scout recommendations — 修正提案の取得

recommendationsはベースイメージの更新提案を提示するコマンドです。単に「脆弱性がある」と報告するだけでなく、具体的にどのタグに変更すべきかを示します。

docker scout recommendations myapp:latest

出力例:

docker scout recommendations の出力例 — ベースイメージの更新・変更提案と脆弱性削減数

「Refresh base image」は同じタグの最新ダイジェストへの更新、「Change base image」は別のベースイメージへの切り替えを提案します。修正による脆弱性削減数とイメージサイズの変化が具体的に表示されるため、対応の優先順位付けに役立ちます。

docker scout compare — イメージ間の差分比較

compareは2つのイメージのセキュリティ状態を比較するコマンドです。PRブランチのビルドとメインブランチのビルドを比較し、新たに導入された脆弱性を検出する用途に最適です。

# featureブランチのイメージとmainブランチのイメージを比較
docker scout compare myorg/myapp:feature-branch \
  --to myorg/myapp:latest \
  --only-severity critical,high \
  --ignore-unchanged

--exit-on vulnerability,policyフラグを付けると、新規脆弱性やポリシー違反が検出された場合にのみビルドを失敗させることが可能です。既存の脆弱性(両方のイメージに共通するもの)は無視し、回帰(デグレ)のみを検出するため、CIパイプラインに組み込む際のノイズが大幅に減ります。

CI/CDパイプラインとの統合

Docker Scoutをローカル環境だけでなくCI/CDパイプラインに組み込むことで、プルリクエストやデプロイのタイミングで自動的にセキュリティチェックを実行できます。

GitHub Actionsとの統合

Docker公式のdocker/scout-actionを使った統合例です。

name: Docker Scout Scan

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  scout:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          tags: ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}

      # PRの場合: 既存イメージとの差分比較
      - uses: docker/scout-action@v1
        if: github.event_name == 'pull_request'
        with:
          command: compare
          image: ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
          to: ${{ secrets.DOCKER_USERNAME }}/myapp:latest
          only-severities: critical,high
          exit-code: true

      # mainブランチの場合: フルスキャン
      - uses: docker/scout-action@v1
        if: github.ref == 'refs/heads/main'
        with:
          command: cves
          image: ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
          only-severities: critical,high
          exit-code: true

PRではcompareコマンドによる差分比較、mainブランチではcvesコマンドによるフルスキャンという使い分けがポイントです。docker/scout-actionはスキャン結果をPRコメントとして自動投稿する機能も備えており、レビュアーがPR画面上でセキュリティ状態を確認できます。

GitLab CIとの統合

docker-build:
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" .
    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
    # Docker Scoutのインストールと実行
    - |
      curl -fsSL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh
      if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]; then
        docker scout cves "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" \
          --exit-code --only-severity critical,high
      else
        docker scout compare "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" \
          --to "$CI_REGISTRY_IMAGE:latest" \
          --exit-on vulnerability,policy \
          --only-severity critical,high \
          --ignore-unchanged
      fi

デフォルトブランチではフルスキャン、フィーチャーブランチではcompareによる差分比較という分岐パターンはGitHub Actionsと同じ考え方です。

その他のCI/CDプラットフォーム

Docker Scoutは以下のプラットフォームにも対応しています。

プラットフォーム統合方法
CircleCIRemote Dockerセットアップ + CLI実行
JenkinsJenkinsfileのstage定義でCLI実行
Azure DevOpsCmdLineタスクでCLI実行
Bitbucket PipelinesDockerサービスコンテナ + CLI実行

いずれもDocker Scout CLIのインストールとDocker Hub認証の設定が共通の前提です。

ポリシー評価機能 — 組織のセキュリティ基準を自動チェック

Docker Scoutのポリシー評価は、個別のCVE検出だけでは対応しきれない「組織としてのセキュリティ基準」を自動的に判定する機能です。2024年10月にGeneral Availabilityとなり、全プランで利用可能になりました。

9種類のビルトインポリシー

ポリシー判定内容活用場面
Severity-Based VulnerabilityCritical/Highの既知CVE有無基本的な脆弱性チェック
High-Profile VulnerabilitiesLog4Shell・Heartbleedなど重大脆弱性業界で話題の脆弱性への即時対応
Compliant LicensesGPLなどコピーレフトライセンスの有無ライセンスコンプライアンス
Up-to-Date Base Imagesベースイメージが最新かイメージの鮮度管理
Supply Chain AttestationsSBOMとProvenance証明の有無サプライチェーン透明性
Default Non-Root Userrootユーザーで実行されていないか最小権限の原則
Approved Base Images承認済みベースイメージの使用組織のイメージポリシー
SonarQube Quality Gatesコード品質スキャンの結果品質ゲート連携
Valid Docker Hardened ImageDHIまたはDHIベースであるか強化イメージの利用推進

「High-Profile Vulnerabilities」ポリシーではCISA KEV(Known Exploited Vulnerabilities)カタログの追跡も有効化できるため、米国政府機関が実際に悪用を確認した脆弱性を自動検出する運用が可能です。

ポリシーの実行はCLIからも可能です。

# 全ポリシーの評価結果を表示
docker scout policy myorg/myapp:latest

# CI/CDでポリシー違反がある場合にビルドを失敗させる
docker scout policy myorg/myapp:latest --exit-code

VEXによる例外管理

実務では「脆弱性として検出されるが、自社の利用方法では悪用不可能」というケースがあります。Docker ScoutはVEX(Vulnerability Exploitability eXchange)ドキュメントによる例外管理に対応しており、誤検知や対応不要なCVEを正式に記録・抑制できます。

  • Docker Scout DashboardまたはDocker DesktopのGUIから例外を作成可能
  • docker scout cves実行時に抑制されたCVEには「SUPPRESSED」ラベルが表示
  • --ignore-suppressedフラグで出力から除外可能

Health Score — イメージの安全性をA〜Fで可視化

Health ScoreはDocker Hubのリポジトリ内イメージに対するセキュリティ総合評価スコアです。単純なCVE件数ではなく、複数のポリシー準拠状況を加味した複合指標として設計されています。

グレーディング基準

達成率グレード
90%以上A
71〜90%B
51〜70%C
31〜50%D
11〜30%E
10%未満F

スコアの配点構成

各ポリシーには重み付けが設定されており、準拠したポリシーのポイント合計から達成率を算出します。

ポリシー配点
Severity-Based Vulnerability20点
High-Profile Vulnerabilities20点
Supply Chain Attestations15点
Approved Base Images15点
Up-to-Date Base Images10点
SonarQube Quality Gates10点(オプション)
Default Non-Root User5点
Compliant Licenses5点
合計100点

脆弱性関連の2ポリシーが計40点を占めるため、CVE対応がスコアに最も大きく影響します。一方、Supply Chain AttestationsやApproved Base Imagesも計30点あるため、SBOMの添付やベースイメージの管理も無視できない配点です。

Health Scoreは圧縮サイズが4GBを超えるイメージや、linux/amd64・linux/arm64以外のアーキテクチャでは算出されません(出典: Docker Docs)。

料金プランと機能範囲

Docker Scoutは2024年12月のプラン改定により、全てのDockerサブスクリプションに統合されました。個別のScout専用プランは廃止され、Dockerサブスクリプションに含まれる形に変更されています(出典: Docker Blog)。

項目Personal(無料)ProTeamBusiness
月額$0$9$15/ユーザー$24/ユーザー
ローカルイメージ分析無制限無制限無制限無制限
リモートリポジトリ監視12無制限無制限
継続的脆弱性分析--無制限無制限
ポリシー評価
Health Score
SBOM生成

ローカルでのイメージスキャンは全プランで無制限に実行できます。無料プランでもCLIの主要機能(cves、sbom、quickview、recommendations)は利用可能なため、個人開発や小規模プロジェクトではPersonalプランで十分対応できます。

チームでの本格運用にはTeamプラン以上が適しています。リモートリポジトリの監視数が無制限になるほか、継続的脆弱性分析(イメージをプッシュするたびに自動スキャン)が利用可能です。

Docker Scout・Trivy・Grype・Snykの比較

Docker Scout以外にもコンテナイメージの脆弱性スキャンツールは複数存在します。代表的な4ツールの特徴を比較します。

比較項目Docker ScoutTrivyGrypeSnyk
開発元DockerAqua SecurityAnchoreSnyk
ライセンスDockerサブスクに統合OSS (Apache 2.0)OSS (Apache 2.0)フリーミアム
コンテナイメージスキャン
ファイルシステムスキャン-
IaCスキャン--
ポリシー評価○(9種類)--
Health Score---
SBOM生成○(SPDX)○(SPDX / CycloneDX)-(Syftと併用)
Docker Hub統合ネイティブ---
オフライン実行不可制限あり
Fix PR自動作成---
シークレット検出--

ツール選定の指針

Docker Scoutが適するケース: Docker Desktop・Docker Hubを中心としたワークフローで運用しており、ポリシー評価やHealth Scoreによる組織的なセキュリティ管理を行いたい場合。追加のツールインストールや認証設定が不要な点もメリットです。

Trivyが適するケース: ベンダーロックインを避けたい場合や、コンテナイメージだけでなくIaC(Terraform、Kubernetes manifests)やファイルシステムもスキャンしたい場合。エアギャップ環境でも利用可能です。

Grypeが適するケース: CI/CDパイプラインに軽量なスキャナーを組み込みたい場合。サーバー不要で単一バイナリとして動作し、SyftでSBOM生成→Grypeで脆弱性検出という組み合わせが可能です。

Snykが適するケース: コンテナだけでなくアプリケーションコードやIaCも統合的にスキャンし、Fix PRの自動作成まで行いたい場合。IDE統合が充実しており、開発者が日常的にセキュリティを意識するワークフローを構築できます。

米国のセキュリティコミュニティでは、異なるデータベースを持つ2ツールを併用してカバー率を高める運用が推奨されています。例えばDocker Scout + Trivyの併用により、Docker Scoutの24データソースとTrivyのNVD・GitHub Advisory等のカバレッジを補完し合う構成が取れます。

Docker Hardened Imagesとの連携

Docker Hardened Images(DHI)は、Docker社が提供するセキュリティ強化済みのコンテナイメージです。2025年12月にApache 2.0ライセンスで無料・オープンソース化され、1,000以上のイメージとHelmチャートが利用可能になりました(出典: Docker Press Release)。

DHIの主な特徴

特徴内容
攻撃対象面の削減従来イメージ比で最大95%削減
CVEパッチ速度24時間以内に修正版を提供
デフォルト非root実行最小権限の原則を標準適用
SLSA Build Level 3ビルドの暗号学的な真正性証明
VEXアテステーション同梱文脈上悪用不可能なCVEを自動抑制

Docker Scoutとの統合ポイント

Docker Scoutの「Valid Docker Hardened Image」ポリシーを有効にすると、イメージがDHIまたはDHIベースで構築されているかを自動検証します。DHIに同梱されるVEXアテステーションはDocker Scoutが自動的に読み取り、悪用不可能と判断されたCVEをスキャン結果から抑制するため、対応が必要な脆弱性だけに集中できます。

DHIのCVEパッチは以下のフローで24時間以内に配信されます。

新規CVE開示 → Scout Real-Time CVE Ingestion で検知
  → 自動リビルドトリガー
  → SBOMで影響コンポーネント特定
  → パッチ適用・テスト
  → 更新イメージ配信(24時間以内)

従来のベースイメージ(Debian公式、Ubuntu公式など)ではCVEの修正に数日〜数週間かかることもあるため、セキュリティ要件の厳しいプロジェクトではDHIの採用が有効な選択肢です。

Docker Scout運用のベストプラクティス

開発フェーズ別のスキャン戦略

Docker Scoutの効果を最大化するには、開発ライフサイクルの各フェーズで適切なスキャンを実行する「シフトレフト」アプローチが有効です。

graph LR
    A[ローカル開発] -->|docker scout quickview| B[PR作成]
    B -->|docker scout compare| C[マージ]
    C -->|docker scout cves + policy| D[デプロイ]
    D -->|ダッシュボード監視| E[運用]
フェーズ推奨コマンド目的
ローカル開発quickview / recommendations早期のリスク把握とベースイメージ選定
PR作成時compare --to latest新規導入された脆弱性の差分検出
マージ後cves --exit-code + policyフルスキャンとポリシー準拠の確認
運用中ダッシュボード + Prometheusエクスポーター継続的なモニタリング

ベースイメージの選定と更新

脆弱性の多くはベースイメージに起因します。以下の指針でベースイメージを管理します。

  • slimまたはalpineバリアントを優先: 不要なパッケージが少ないほど攻撃対象面が縮小
  • 月次でベースイメージを更新: docker scout recommendationsで最新の推奨タグを確認
  • Docker Hardened Imagesの検討: セキュリティ要件が厳しい場合はDHIへの移行で95%の攻撃対象面削減が可能

Prometheusによるメトリクス監視

Docker ScoutのPrometheusメトリクスエクスポーターを利用すると、Grafanaダッシュボードで脆弱性数やポリシー準拠状況を時系列で可視化できます。

エンドポイント: /v1/exporter/org/<ORG>/metrics

認証にはDocker Hub Personal Access Token(PAT)を使用します。Docker社がスターターテンプレートのDocker Composeファイルを提供しているため、Prometheus + Grafanaの環境構築は比較的容易です(出典: Docker Docs)。

レジストリ統合

Docker Hub以外のコンテナレジストリとも統合可能です。

  • Amazon ECR: Docker Scout DashboardからECRレジストリを接続
  • JFrog Artifactory: Artifactoryのイメージを直接参照してスキャン
  • Azure Container Registry: ACRとの統合設定が可能

まとめ

Docker Scoutは脆弱性スキャンにとどまらず、SBOM生成・ポリシー評価・Health Score・修正提案までを一貫して提供するセキュリティプラットフォームです。Docker Desktop・Docker Hub・CLIにネイティブ統合されているため、既存のDockerワークフローに追加の学習コストなく組み込めます。

無料のPersonalプランでもローカルスキャンは無制限に利用できるため、まずはdocker scout quickviewでプロジェクトのイメージをスキャンし、脆弱性の全体像を把握するところから始めるのが効果的です。CI/CDパイプラインへの統合は、GitHub Actionsのdocker/scout-actionを使えば数行のYAML追加で実現できます。

チームでの本格運用では、ポリシー評価によるセキュリティ基準の自動チェックと、Health Scoreによるイメージ品質の可視化が効果を発揮します。Trivy・Grypeなどの代替ツールとの併用でカバー率を高める運用も選択肢の一つです。