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

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

メモ

Docker Hardened イメージは無償利用が可能になりました。 これはサブスクリプション購入を必要とせず、利用制限やベンダーロックインもありません。 FIPS や STIG などのコンプライアンスへの準拠、カスタマイズ機能、SLA ベースのサポートといったエンタープライズ機能を必要とする場合は DHI エンタープライズサブスクリプションへのアップグレードも可能です。

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

  1. Docker Hub 内にある Hardened イメージカタログにアクセスし、サインインします。
  2. 左側のサイドバーから Hardened Images を選びます。 DHI エンタープライズを利用している場合は Hardened Images > Catalog を選びます。
  3. 検索バーや検索フィルターを使ってイメージ (python, node, golang など) を検索します。 本ガイドでは例として Python イメージを用いることにします。
  4. Python リポジトリを選択すれば、その詳細を確認できます。

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

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

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

情報

DHI カタログ内にある各リポジトリページでは、Use this image を選ぶと、イメージのプルやスキャンの手順を読むことができます。

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

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

    $ docker login dhi.io
    
  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 エンタープライズサブスクリプションでは、新たな 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 への移行: Docker AI アシスタントを使って、Dockerfile の書き換えを行い、ベースイメージとして Docker Hardened イメージを用いるようにします。

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

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

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

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