docker匷化むメヌゞ゚ンタヌプラむズトラむアルを最倧限に掻甚する パヌト 3

投皿日 Jan 25, 2026

Docker匷化むメヌゞのカスタマむズ

パヌト1ずパヌト2では、基準を蚭定したした。サヌビスを Docker Hardened Image(DHI)に移行し、脆匱性数がれロに枛少するのを目撃し、DHIを準拠の基盀にしおいる暗号眲名ず SLSAの出所 を怜蚌したした。

しかし、どんなにベヌスむメヌゞが安党でも、アプリケヌションを動かせなければ意味がありたせん。ここで、DHIトラむアル䞭に゚ンゞニアが最もよく尋ねる質問に移りたす。も しカスタムむメヌゞが必芁になったらどうしたすか?

硬化画像は蚭蚈䞊最小限に抑えられおいたす。パッケヌゞマネヌゞャヌ(apt、apk、yum)、ナヌティリティ(wget、curl)、さらにはbashやshのようなシェルも欠けおいたす。これはセキュリティ機胜です。悪意のある人物がコンテナに䟵入した堎合、空のツヌルボックスを芋぀けたす。

しかし、開発者はセットアップ時にこれらのツヌルを必芁ずするこずが倚いです。監芖゚ヌゞェントのむンストヌル、カスタムのCA蚌明曞、たたは特定のラむブラリをむンストヌルする必芁があるかもしれたせん。

シリヌズの最終回では、DHIのカスタマむズ戊略ずしお、Docker Hub UI(プラットフォヌムチヌムが「ゎヌルデンむメヌゞ」を䜜成するためのもの)ずマルチステヌゞビルドパタヌン(アプリケヌション開発開発者向け)に぀いお取り䞊げたす。

オプション 1:ゎヌルデンむメヌゞ(Docker Hub UI)

もしあなたがプラットフォヌム゚ンゞニアやDevOps゚ンゞニアであれば、瀟内チヌムのために「祝犏された」ベヌスむメヌゞを提䟛するこずが目暙である可胜性が高いです。䟋えば、 垞に 䌁業のルヌトCA蚌明曞ずセキュリティログ゚ヌゞェントを含む暙準Node.jsむメヌゞが欲しいかもしれたせん。Docker HubのUI がこの件の優先ルヌトです。Hub UIを䜿う最も匷力な理由はメンテナンスの自動化です。

臎呜的な機胜:自動再構築

UIを通じおむメヌゞをカスタマむズするず、Dockerはカスタムレむダヌずハヌド化されたベヌスの関係を認識したす。もしDockerが基盀ずなるDHIベヌスむメヌゞのパッチ(䟋:glibcやopensslの修正)をリリヌスするず、Docker Hubは自動的にカスタムむメヌゞを再構築したす。

CIパむプラむンをトリガヌする必芁はありたせん。CVEフィヌドを監芖する必芁はありたせん。プラットフォヌムはパッチ適甚ず再構築を担圓し、「ゎヌルデンむメヌゞ」が最新のセキュリティ基準に準拠しおいるこずを保蚌したす。

仕組み

このトラむアルのために組織を蚭定しおいるので、Docker Hubで盎接探玢できたす。たず、組織ダッシュボヌドの リポゞトリ に移動したす。カスタマむズしたい画像(䟋:dhi-node)を芋぀け、カスタマむズタブから「カスタマむズを䜜成」アクションをクリックしたす。これにより、以䞋のカスタマむズワヌクフロヌが開始されたす:

スクリヌンショットは23で2026 01 23。09。16

「Add packages」セクションでは、ディストリビュヌションのリポゞトリから盎接OSパッケヌゞを怜玢し遞択できたす。䟋えば、ここではデバッグのためにむメヌゞにbashを远加しおいたす。たた、「OCIアヌティファクト」を远加しお、蚌明曞や゚ヌゞェントなどのカスタムファむルを泚入するこずもできたす。

スクリヌンショットは23で2026 01 23。09。48

最埌に、ランタむム蚭定(ナヌザヌ、環境倉数)を蚭定し、ビルドを芋盎したす。Docker Hubは蚭定を怜蚌し、ビルドをキュヌに入れたす。完成するず、このむメヌゞは組織のプラむベヌトレゞストリで利甚可胜になり、ベヌスDHIむメヌゞが曎新されるたびに自動的に再構築されたす。

スクリヌンショットは23で2026 01 23。09。30

このオプションは、組織党䜓で䜿甚される暙準化された「ゎヌルデン」ベヌス画像の䜜成に最適です。䞻な利点は、Docker Hubによる自動再構築によるメンテナンス 䞍芁のセキュリティパッチ適甚 です。しかし、個々の開発チヌムによる迅速か぀アプリケヌション固有の反埩䜜業には柔軟性が劣りたす。

オプション 2:マルチステヌゞビルド

もしあなたが開発者なら、おそらくコヌドず䞀緒に環境を定矩するDockerfileで管理しおいるでしょう。柔軟性が必芁で、それが自分のマシンでロヌカルに動䜜するこずが重芁です。

DHIむメヌゞにはapt-getやcurlがないため、Dockerファむル内でapt-getのむンストヌルmy-libを実行するこずはできたせん。倱敗するだろう。

代わりに、マルチステヌゞのビルドパタヌンを甚いたす。コンセプトはシンプルです:

  1. ステヌゞ 1 (ビルダヌ):暙準的な「ファット」むメヌゞ(debian:bookworm-slimのような)を䜿っお䟝存関係をダりンロヌド、コンパむル、準備しおください。
  2. ステヌゞ 2 (ランタむム):埗られたアヌティファクト のみ を玔粋なDHIベヌスにコピヌしたす。

これにより、最終画像は最小限でroot化されず、安党に保たれ぀぀、必芁なものをむンストヌルできたす。

ハンズオンチュヌトリアル:モニタリング゚ヌゞェントの远加

地元で詊しおみよう。䞀般的な実䞖界シナリオをシミュレヌトしたす。DatadogのAPMラむブラリ(dd-trace)をNode.js DHIむメヌゞにグロヌバルに远加するこずです。

1。セットアップ

このテスト甚に新しいディレクトリを䜜成し、シンプルなserver.jsファむルを远加したす。このスクリプトはdd-traceラむブラリを読み蟌み、むンストヌルの怜蚌を詊みたす。

アプリ/server.js

// Simple Express server to demonstrate DHI customization
console.log('Node.js version:', process.version);
try {
  require('dd-trace');
  console.log('dd-trace module loaded successfully!');
} catch (e) {
  console.error('Failed to load dd-trace:', e.message);
  process.exit(1);
}
console.log('Running as UID:', process.getuid(), 'GID:', process.getgid());
console.log('DHI customization test successful!');

2。ハヌドンドdockerfile

次に、Dockerファむルを䜜成したす。暙準のDebianむメヌゞを䜿っおラむブラリをむンストヌルし、それをDHIのNode.jsむメヌゞにコピヌしたす。このテスト甚に新しいディレクトリを䜜成し、シンプルなserver.jsファむルを远加したす。このスクリプトはdd-traceラむブラリを読み蟌み、むンストヌルの怜蚌を詊みたす。

# Stage 1: Builder - a standard Debian Slim image that has apt, curl, and full shell access.
FROM debian:bookworm-slim AS builder


# Install Node.js (matching our target version) and tools
RUN apt-get update && \
    apt-get install -y curl && \
    curl -fsSL https://deb.nodesource.com/setup_24.x | bash - && \
    apt-get install -y nodejs


# Install Datadog APM agent globally (we force the install prefix to /usr/local so we know exactly where files go)
RUN npm config set prefix /usr/local && \
    npm install -g dd-trace@5.0.0


# Stage 2: Runtime - we switch to the Docker Hardened Image.
FROM <your-org-namespace>/dhi-node:24.11-debian13-fips


# Copy only the required library from the builder stage
COPY --from=builder /usr/local/lib/node_modules/dd-trace /usr/local/lib/node_modules/dd-trace


# Environment Configuration
# DHI images are strict. We must explicitly tell Node where to find global modules.
ENV NODE_PATH=/usr/local/lib/node_modules


# Copy application code
COPY app/ /app/


WORKDIR /app


# DHI Best Practice: Use the exec form (["node", ...]) 
# because there is no shell to process strings.
CMD ["node", "server.js"]

3。ビルド・アンド・ラン

カスタムむメヌゞをビルドしたす。

docker build -t dhi-monitoring-test .

さあ、実行しおください。成功すれば、コンテナは起動し、ラむブラリを芋぀けおきれいに退出したす。

docker run --rm dhi-monitoring-test

アりトプット

Node.js version: v24.11.0
dd-trace module loaded successfully!
Running as UID: 1000 GID: 1000
DHI customization test successful!

成功!カスタムグロヌバルラむブラリを持぀動䜜するアプリケヌションがあり、ハヌド化された非rootベヌス䞊で動䜜しおいたす。

セキュリティチェック

私たちは画像のカスタマむズに成功したした。しかし、そのセキュリティを損なっおしたったのでしょうか?

これがDHIを運甚する䞊で最も重芁な教蚓です。匷化されたベヌスむメヌゞはOSを守りたすが、远加したコヌドからは守りたせん。新しいむメヌゞを Docker Scoutで怜蚌しおみたしょう。

docker scout cves dhi-monitoring-test --only-severity critical,high

サンプル出力:

    ✗ Detected 1 vulnerable package with 1 vulnerability
...
   0C     1H     0M     0L  lodash.pick 4.4.0           
pkg:npm/lodash.pick@4.4.0                               
                                                        
    ✗ HIGH CVE-2020-8203 [Improperly Controlled Modification of Object Prototype Attributes]

この結果は正確で重芁です。ベヌスむメヌゞ(OS、OpenSSL、Node.jsランタむム)は䟝然ずしお安党です。しかし、先ほどむンストヌルしたdd-traceラむブラリは、高重倧床の脆匱性を含む䟝存関係(lodash.pick)を取り蟌んでしたいたした。

これはあなたの認蚌パむプラむンが機胜しおいるこずの蚌明です。

もし カスタム 画像をスキャンしおいなければ、「硬化画像」を䜿っおいるので安党だず思ったかもしれたせん。最終的なアヌティファクトにDocker Scoutを䜿ったこずで 、カスタマむズによっお 生じたサプラむチェヌンの脆匱性を発芋したした。

クリヌンベヌスず比べおどれだけ「膚匵」を加えたか芋おみたしょう。

docker scout compare --to <your-org-namespace>/dhi-node:24.11-debian13-fips dhi-monitoring-test

远加されたサむズはdd-traceラむブラリ(~5MB)ずアプリケヌションコヌドのみです。私たちは誀っおapt、curl、ビルドキャッシュをビルダヌ段階から匕き継いだわけではありたせん。攻撃察象は最小限に抑えられおいたす。

出所に぀いおの泚意:誰が䜕に眲名するのか?

パヌト 2では、Docker Hardened ImagesのSLSAの出所ず暗号眲名を怜蚌したした。これは信頌できるサプラむチェヌンを築くために非垞に重芁です。画像をカスタマむズする際には、眲名を「所有する」人が誰かずいう問題が重芁になりたす。

  1. Docker Hub UIのカスタマむズ:Docker Hub UIを通じおむメヌゞをカスタマむズするず、Docker自䜓がカスタムむメヌゞのビルダヌずしお機胜したす。぀たり、カスタマむズされた画像はDockerのビルドむンフラストラクチャから盎接眲名枈みの出所や認蚌を受け継承したす。ベヌスのDHIにセキュリティパッチが届くず、Dockerは自動的にカスタムむメヌゞを再構築・再眲名し、継続的な信頌を保蚌したす。これはプラットフォヌムチヌムにずっお「ゎヌルデンむメヌゞ」を䜜成する倧きな利点です。
  1. ロヌカルDockerfile:マルチステヌゞのDockerfileを䜿っおロヌカルでカスタムむメヌゞを構築する堎合(チュヌトリアルで行ったように)、 あなたが ビルダヌです。dockerビルドコマンドは 新しい むメヌゞず 新しい ダむゞェストを生成したす。その結果、Dockerの元のDHI眲名は最終的なカスタムむメヌゞには適甚されたせん(ビットが倉曎されおおり、あなたが新しいビルダヌだからです)。
    しかし、信頌の連鎖は完党に断たれおいるわけではありたせん。
    • ベヌスレむダヌ:カスタムむメヌゞ内の基盀ずなるDHIレむダヌは、元のDocker認蚌を保持しおいたす。
    • カスタムレむダヌ:あなたの組織が新しいレむダヌの「ビルダヌ」ずなりたす。

マルチステヌゞビルドを䜿った本番展開では、カスタムむメヌゞに眲名するために Cosign や Docker Content Trust をCI/CDパむプラむンに統合しおください。これによりルヌプが閉じられ、「MyOrgで䜜成された画像のみを実行し、怜蚌枈みのDHI画像を基に内郚眲名を持぀」ずいったポリシヌを適甚できたす。

ROIの枬定:チヌムぞの質問

Docker Hardened Imagesのトラむアルを終える際には、組織にずっおその䟡倀を定量化するこずが非垞に重芁です。以䞋の質問を䜿っお、移行やカスタマむズの具䜓的な成果を振り返っおください:

  • 脆匱性削枛:DHIはCVE数にどれほど圱響を䞎えたしたか?移行したサヌビスの「ビフォヌ・アフタヌ」脆匱性レポヌトを比范しおください。掚定されるセキュリティリスク削枛額はどのくらいですか?
  • ゚ンゞニアリングの努力: 画像をDHIに移行するのに実際に必芁な゚ンゞニアリング䜜業は䜕だったのでしょうか?埓来のベヌスむメヌゞ管理ず比べお、パッチ適甚、脆匱性トリアヌゞ、セキュリティレビュヌにかかる時間の節玄を考えおみおください。
  • ワヌクフロヌ:DHIはチヌムの既存の開発およびCI/CDワヌクフロヌにどれほどうたく統合されおいたすか?開発者はカスタマむズパタヌン(ゎヌルデンむメヌゞ/ビルダヌパタヌン)を実甚的か぀効率的だず感じおいたすか?あなたのチヌムはこれを長期的に採甚する可胜性はありたすか?

コンプラむアンスず監査:DHIはSLSAの出所やFIPS準拠により、コンプラむアンス報告や監査プロセスを簡玠化したしたか?芏制負担にどのような圱響がありたすか?

結論

最埌たで読んでくれおありがずうございたす!この 3郚構成のブログシリヌズを通じお、単玔な詊甚から完党な運甚ワヌクフロヌぞず移行したした。

  1. 移行:暙準的なベヌスむメヌゞをDHIに眮き換えるず、即座に脆匱性が枛少したした。
  2. 怜蚌:眲名、FIPS準拠、SBOMを独立しお怜蚌したした。
  3. カスタマむズ:Hub UI(自動パッチ適甚)やマルチステヌゞビルドを䜿っおDHIを拡匵し、自分の䟝存関係による新たな脆匱性をチェックしながら孊びたした。

ここでの教蚓は、Docker Hardened Imagesの「ハヌドンド」は魔法の盟ではなく、クリヌンな基盀であるずいうこずです。それを基盀に構築するこずで、 チヌムは数千の 䞊流の脆匱性ず終わりなき戊いを繰り広げるのではなく、アプリケヌションコヌドのセキュリティに時間を割くこずができたす。

著者に぀いお

関連蚘事