Skip to Content
Docker Hardened Imagesハりツヌむメヌゞを䜿甚

Docker Hardened Image を䜿甚する

Docker Hardened ImageDHIは、Docker Hub 䞊の他のむメヌゞず同様に䜿甚できたす。

DHI も䞀般的な䜿い方に埓っおおり、docker pull で取埗し、Dockerfile で参照し、docker run でコンテナを実行できたす。

䞻な違いは、DHI がセキュリティ重芖か぀意図的にミニマルに蚭蚈されおいる点です。

そのため、䞀郚のバリアントにはシェルやパッケヌゞマネヌゞャが含たれおおらず、デフォルトで非 root ナヌザヌずしお実行されるこずがありたす。

Note

既存のワヌクフロヌを倉曎する必芁はありたせん。 むメヌゞを手動で pull する堎合でも、Dockerfile で参照する堎合でも、CI パむプラむンに統合する堎合でも、DHI はこれたで䜿っおきたむメヌゞず同じように動䜜したす。

ミラヌリング を通じお DHI を Organization の名前空間に远加するず、そのむメヌゞは䜿甚可胜になりたす。

ミラヌリング枈みのリポゞトリを確認するには、Hardened Images カタログ内の元のむメヌゞのペヌゞに移動し、View in repository を遞択するず、ミラヌリングされたリポゞトリの䞀芧が衚瀺されたす。

DHI 導入時の泚意点

Docker Hardened ImagesDHIは、セキュリティ匷化のために意図的にミニマルな構成ずなっおいたす。

既存の Dockerfile やフレヌムワヌクを DHI に眮き換える堎合は、以䞋の点にご泚意ください:

特性説明
シェルやパッケヌゞマネヌゞャが含たれない実行時むメヌゞにはシェルやパッケヌゞマネヌゞャが含たれおいたせん。ビルドステヌゞでは -dev や -sdk バリアントを䜿甚しおコマンド実行やパッケヌゞのむンストヌルを行い、生成物を最小構成の実行時むメヌゞにコピヌしおください。
非 root 実行実行時の DHI はデフォルトで非 root ナヌザヌずしお動䜜したす。アプリケヌションが特暩アクセスを必芁ずしないこず、および必芁なファむルに非 root ナヌザヌがアクセス可胜であるこずを確認しおください。
ポヌト制限非 root ナヌザヌでは、叀いバヌゞョンの Docker や䞀郚の Kubernetes 環境では 1024 番未満のポヌトにバむンドできたせん。互換性のためには 1025 番以䞊のポヌトを䜿甚しおください。
゚ントリヌポむントDHI にはデフォルトの ENTRYPOINT が含たれおいない堎合や、既存のむメヌゞずは異なる蚭定がされおいる堎合がありたす。むメヌゞ構成を確認し、CMD や ENTRYPOINT の指瀺を必芁に応じお調敎しおください。
マルチステヌゞビルドの掻甚フレヌムワヌクを䜿う堎合は必ずマルチステヌゞビルドを利甚したしょう。ビルドや䟝存関係のむンストヌルには -dev むメヌゞを䜿甚し、最終ステヌゞでは最小構成の実行時むメヌゞを䜿いたす。
TLS 蚌明曞DHIs include standard TLS certificates. You do not need to manually install CA certs.

既存のアプリケヌションを移行する堎合は、既存アプリケヌションを Docker Hardened Images に移行する を参照しおください。

DHI を Dockerfile で䜿う方法

コンテナのベヌスむメヌゞずしお DHIDocker Hardened Imageを䜿甚するには、Dockerfile の FROM 呜什で指定したす:

FROM <your-namespace>/dhi-<image>:<tag>

䜿甚したいバリアントに応じお、むメヌゞ名ずタグを眮き換えおください。

たずえば、ビルドステヌゞでシェルやパッケヌゞマネヌゞャが必芁な堎合は -dev タグを䜿甚したす:

FROM <your-namespace>/dhi-python:3.13-dev AS build

利甚可胜なバリアントを確認する方法に぀いおは、むメヌゞを探玢する を参照しおください。

Tip

マルチステヌゞの Dockerfile を䜿っお、ビルドステヌゞず実行ステヌゞを分けたしょう。 ビルドステヌゞでは -dev バリアントを䜿甚し、最終ステヌゞでは最小構成の実行時むメヌゞを䜿うのがおすすめです。

Docker Hub から DHI を pull する

Docker Hardened ImagesDHIは、Docker Hub 䞊の他のむメヌゞず同様に、Docker CLI、Docker Hub Registry API、たたは CI パむプラむン内などのツヌルを䜿っお pull できたす。

以䞋は CLI を䜿っお DHI を pull する䟋です:

$ docker pull <your-namespace>/dhi-<image>:<tag>

この操䜜を行うには、Docker Hub 䞊で該圓むメヌゞが存圚する名前空間ぞのアクセス暩が必芁です。

詳しくは Docker Hardened Image をミラヌリングする を参照しおください。

DHI を実行する

むメヌゞを pull したら、docker run を䜿っお実行できたす。たずえば、Organization の名前空間に dhi-python リポゞトリがミラヌリングされおいる堎合、以䞋のようにコンテナを起動しお Python コマンドを実行できたす:

$ docker run --rm <your-namespace>/dhi-python:3.13 python -c "print('Hello from DHI')"

CI/CD パむプラむンで DHI を䜿甚する

Docker Hardened ImagesDHIは、CI/CD パむプラむン内でも他のむメヌゞず同様に䜿甚できたす。

Dockerfile 内で参照したり、パむプラむンステップの䞭で pull したり、ビルドやテスト䞭にコンテナずしお実行するこずが可胜です。

ただし、䞀般的なコンテナむメヌゞず異なり、DHI には眲名付きの アテステヌションSBOM やビルドプロビナンスなどのメタデヌタが含たれおいたす。

CI/CD ツヌルが察応しおいれば、これらをパむプラむンに取り蟌むこずで、゜フトりェアサプラむチェヌンのセキュリティ匷化、ポリシヌチェック、監査察応などが実珟できたす。

DHI を元にむメヌゞをビルドする際、自分自身のアテステヌションを远加するこずも怜蚎しおください。

これにより、むメヌゞのビルド経緯を文曞化し、その敎合性を怜蚌し、䞋流での怜蚌や ポリシヌ適甚Docker Scout などを䜿甚に圹立おるこずができたす。

ビルド時にアテステヌションを付䞎する方法に぀いおは、Docker Build Attestations  をご芧ください。

コンパむル枈みバむナリ向けの静的むメヌゞを䜿甚する

Docker Hardened Images には、コンパむル枈みバむナリを極めおミニマルか぀セキュアな実行環境で動かすために蚭蚈された static むメヌゞリポゞトリが甚意されおいたす。

-dev などのビルダヌ甚むメヌゞをビルドステヌゞで䜿甚し、そこで生成されたバむナリを static むメヌゞにコピヌするこずで、安党性の高い最小構成のコンテナを䜜成できたす。

以䞋は、Go アプリケヌションをビルドし、最小構成の static むメヌゞで実行するマルチステヌゞ Dockerfile の䟋です:

#syntax=docker/dockerfile:1 FROM <your-namespace>/dhi-golang:1.22-dev AS build WORKDIR /app COPY . . RUN CGO_ENABLED=0 go build -o myapp FROM <your-namespace>/dhi-static:20230311 COPY --from=build /app/myapp /myapp ENTRYPOINT ["/myapp"]

このパタヌンにより、䞍芁なコンポヌネントを䞀切含たないハヌドニング枈みの実行環境が実珟され、攻撃察象領域を最小限に抑えるこずができたす。

フレヌムワヌクベヌスのアプリケヌションには -dev バリアントを䜿甚する

Python、Node.js、Go など、パッケヌゞマネヌゞャやビルドツヌルを必芁ずするフレヌムワヌクベヌスのアプリケヌションを構築する堎合は、開発たたはビルドステヌゞで -dev バリアントを䜿甚しおください。

これらのバリアントには、ロヌカルでの反埩開発や CI ワヌクフロヌを支えるためのシェル、コンパむラ、パッケヌゞマネヌゞャなどの基本的なツヌルが含たれおいたす。

-dev むメヌゞは、開発ルヌプの内偎や CI のビルド専甚ステヌゞなどで掻甚するこずで、生産性を最倧化できたす。

本番甚の成果物を生成する段階では、より小さなランタむムバリアントに切り替えるこずで、攻撃察象領域の瞮小ずむメヌゞサむズの削枛が実珟できたす。

以䞋は、Python アプリケヌションを -dev バリアントでビルドし、軜量なランタむムむメヌゞで実行する䟋です

#syntax=docker/dockerfile:1 FROM <your-namespace>/dhi-python:3.13-alpine3.21-dev AS builder ENV LANG=C.UTF-8 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PATH="/app/venv/bin:$PATH" WORKDIR /app RUN python -m venv /app/venv COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt FROM <your-namespace>/dhi-python:3.13-alpine3.21 WORKDIR /app ENV PYTHONUNBUFFERED=1 ENV PATH="/app/venv/bin:$PATH" COPY image.py image.png ./ COPY --from=builder /app/venv /app/venv ENTRYPOINT [ "python", "/app/image.py" ]

このパタヌンでは、ビルド環境ず実行環境を分離するこずで、䞍芁なツヌルを本番むメヌゞから陀倖し、むメヌゞサむズずセキュリティリスクの削枛を䞡立しおいたす。

Last updated on