Share feedback
Answers are generated based on the documentation.

Docker Hardened イメージのクィックスタート

本ガイドでは Docker Hardened イメージ (DHI) を使った実際の例を通じて、ゼロからその実行方法について示していきます。 ガイドを終えた時には、DHI こそが標準的な Docker イメージであり、他との違いを充分に理解できるようになります。 各手順においては例として特定のイメージを利用していきますが、どの DHI についても同様に適用できる話です。

This quickstart uses DHI Community images from dhi.io. You sign in with your Docker account, pull and run an image, and compare it with a Docker Official Image.

メモ

If you have a DHI Select or Enterprise subscription, see Get started with DHI Select and Enterprise instead. Select and Enterprise use mirrored repositories in your organization namespace on Docker Hub to enable customization, SLA-backed security updates, and access to compliance variants.

手順 1: 利用イメージの検索

  1. Docker Hub 内にある Hardened イメージカタログにアクセスしします。
  2. 検索バーや検索フィルターを使ってイメージ (python, node, golang など) を検索します。 本ガイドでは例として Python イメージを用いることにします。
  3. Python リポジトリを選択すれば、その詳細を確認できます。

次の手順に進み、イメージをプルして実行します。 イメージを検索して評価したい場合は Docker Hardened イメージの確認 を参照してください。

手順 2: イメージのプルと実行

普通の Docker イメージと同じようにして DHI もプルを行って実行することができます。 なお Docker Hardened イメージは、出来るだけサイズを小さく、そしてセキュアであることを目指して設計されています。 したがってそのイメージには、どのイメージにもありそうなツールやライブラリが含まれていない、ということがあります。 よくありがちな違いについては DHI 選定の際に考慮すべきこと を確認してください。

以下は、Python イメージを起動させて、単純な Python コマンドを実行する例です。 そのコマンドは、他の Docker イメージでも実行している普通のコマンドです。

  1. 端末を開いて Docker Hardened イメージのレジストリにサインインします。 サインインにあたっては Docker アカウントを利用します。

    $ docker login dhi.io
    
    情報

    Docker アカウントを取得していない場合は、無償アカウントの生成 を行ってから進めてください。

  2. イメージをプルします。

    $ docker pull dhi.io/python:3.13
    
  3. イメージを実行して、すべてがうまく動作することを確認します。

    $ docker run --rm dhi.io/python:3.13 python -c "print('Hello from DHI')"
    

    上のコマンドは python:3.13 イメージからコンテナーを起動させ、Hello from DHI という文字列を出力する Python コマンドを実行します。

イメージの利用に関して、さらなる情報は以下を参考にしてください。

手順 3: 他のイメージとの比較

DHI イメージではセキュリティを改善させています。 そういった違いを通じて、他のイメージと比較して見ることができます。 この比較によって Hardened イメージを利用する意味が理解できるはずです。

以下のコマンドを実行すると Docker Hardened イメージと、そうではない Docker イメージを比較することができます。 どちらも Docker Hub から取得できるものであり、Python 向けとして作られているものです。

$ docker scout compare dhi.io/python:3.13 \
    --to python:3.13 \
    --platform linux/amd64 \
    --ignore-unchanged \
    2>/dev/null | sed -n '/## Overview/,/^  ## /p' | head -n -1

出力結果は以下となります。

  ## Overview

                      │                    Analyzed Image                     │               Comparison Image
  ────────────────────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────
    Target            │  dhi.io/python:3.13                                   │  python:3.13
      digest          │  c215e9da9f84                                         │  7f48e892134c
      tag             │  3.13                                                 │  3.13
      platform        │ linux/amd64                                           │ linux/amd64
      provenance      │ https://github.com/docker-hardened-images/definitions │ https://github.com/docker-library/python.git
                      │  77a629b3d0db035700206c2a4e7ed904e5902ea8             │  3f2d7e4c339ab883455b81a873519f1d0f2cd80a
      vulnerabilities │    0C     0H     0M     0L                            │    0C     1H     5M   141L     2?
                      │           -1     -5   -141     -2                     │
      size            │ 35 MB (-377 MB)                                       │ 412 MB
      packages        │ 80 (-530)                                             │ 610
                      │                                                       │
メモ

これは一つの出力例です。 実際の出力結果は、適用された CVE やイメージ更新により変化しているはずです。

Docker では Docker Hardened イメージにおける CVE をほぼゼロにするように保守を行っています。 DHI Select と Enterprise サブスクリプションでは、新たな CVE が検出されると、業界最短の SLA 期間内で修復を行います。 詳細については SLA ベースのセキュリティ機能 を参照してください。

この比較から Docker Hardened イメージの以下の特徴が分かります。

  • ぜい弱性の除去: high (高) が 1 個、medium (中間) が 5 個、low (低) が 141 個 を除去、また未特定の重大な CVE 2 個を除去しています。
  • サイズの軽減: 412 MB から 35 MB (91%) にサイズ軽減しています。
  • パッケージの削減: 610 パッケージから 80 パッケージ (87%) に削減しています。

イメージ比較に関しての詳細は Docker Hardened イメージの検索と評価 を参照してください。

次は何?

Docker Hardened イメージをここで初めてプルし実行してみました。 ここからさらに、以下を進めていきましょう。

  • 既存アプリの DHI への移行: Gordon を使って、Dockerfile の書き換えを行い、ベースイメージとして Docker Hardened イメージを用いるようにします。

  • トライアルをはじめよう によって DHI サブスクリプションのメリット、すなわち FIPS や STIG 準拠へのアクセス、イメージのカスタマイズ、SLA ベースの更新を確認します。

  • DHI Select や Enterprise をはじめよう: DHI サブスクリプションの購入あるいはトライアルを開始した後は、DHI リポジトリのミラー方法について学びます。 これを行うことにより、リポジトリのミラー、イメージのカスタマイズ、コンプライアンス準拠へのアクセスを学びます。

  • DHI の検証: Docker Scout や Cosign といったツールを使って、SBOM やプロビナンス (provenance) のような署名済み証明書の確認と検証を行います。

  • DHI のスキャン: 既知の CVE を検出できる Docker Scout や他のスキャナーを使って、イメージを分析します。