VPoTの岩本 (iwamot) です。
Docker Hardened Images (DHI) は、Docker社が公開している安全性の高いイメージ群です。2025年5月のリリース当初は有償版のみでしたが、2025年12月に無料版も提供開始されました。
ぼくが開発しているAI Slack bot「Collmbo」も、ベースイメージをDocker公式の「python」から、DHIの「dhi.io/python」に移行済みです。
本記事では、移行によって安全性がどれだけ高まったのか、また、実際の運用でどのような点に気づいたかをご紹介します。
移行によって安全性がどれだけ高まったのか
まず、安全性そのものについて見てみます。
CollmboをDHIに移行した際は、Trivyによる脆弱性の指摘が62件から15件に減りました。
Docker Hardened Imagesが無料になったので、#Collmbo のベースイメージを替えてみた。脆弱性の指摘が62件から15件に減った。いい感じhttps://t.co/yDsQ8HZkod
— Takashi Iwamoto (@iwamot) 2025年12月18日
脆弱性は新たに発見されたり対応されたりするので、現時点での結果も比較してみます。
$ trivy image python:3.14.2-slim-trixie -q | grep "^Total:" Total: 65 (UNKNOWN: 0, LOW: 51, MEDIUM: 12, HIGH: 2, CRITICAL: 0) $ docker login dhi.io $ trivy image dhi.io/python:3.14.2-debian13 -q | grep "^Total:" Total: 17 (UNKNOWN: 0, LOW: 13, MEDIUM: 3, HIGH: 1, CRITICAL: 0)
python:3.14.2-slim-trixie から dhi.io/python:3.14.2-debian13 に移行するだけで、65件から17件に減ることがわかります。
実際の運用でどのような点に気づいたか
移行後の運用で気づいた点には、以下がありました。
- イメージを参照する場合、dhi.ioリポジトリへのログインが必要
- Renovateでアップデートしたい場合、工夫が必要
イメージを参照する場合、dhi.ioリポジトリへのログインが必要
前述のTrivyでの比較例でも docker login dhi.io したように、DHIのイメージを参照するには、リポジトリへのログインが必要です。
この点は、DHIをベースイメージとして利用し、カスタムイメージをビルドする場合でも同様です。GitHub Actionsでビルドする例は、以下のようになります。
- name: Login to Docker Hardened Images uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 with: registry: dhi.io username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build Docker image run: | docker build -t my-tag .
DOCKERHUB_USERNAME:Docker Hubのユーザー名DOCKERHUB_TOKEN:Docker Hubで作成したPAT
Renovateでアップデートしたい場合、工夫が必要
また、RenovateでDHIをアップデート対象とするには、工夫が必要でした。
DockerfileでSHA pinningする
DHIでは、脆弱性対応により同じタグのイメージが更新されていきます。そのため、きちんと追随するにはSHA pinningが必要となります。
FROM dhi.io/python:3.14.2-debian13@sha256:2a1e15070c4798908463c6ef43e63cb278fcd27b025e0296e8144a28dff34dbb
ホストルールで認証情報を渡す
さらに、前述のとおりイメージを参照するにはログインしなければならないので、Renovateにもホストルールで認証情報を渡す必要があります。
CollmboではRenovateをセルフホストしており、以下のように renovatebot/github-action へ認証情報を渡しています。
- name: Run Renovate uses: renovatebot/github-action@66387ab8c2464d575b933fa44e9e5a86b2822809 # v44.2.4 with: configurationFile: .github/renovate.json token: ${{ steps.app-token.outputs.token }} env: RENOVATE_REPOSITORIES: ${{ github.repository }} RENOVATE_HOST_RULES: '[{"matchHost":"dhi.io","hostType":"docker","username":"${{ secrets.DOCKERHUB_USERNAME }}","password":"${{ secrets.DOCKERHUB_TOKEN }}"}]'
まとめ
以上、DHIへの移行によって安全性がどれだけ高まったのか、また、実際の運用でどのような点に気づいたかをご紹介しました。
イメージの参照にはリポジトリへのログインが必要なため、各種ワークフローで気をつけなければならないところがあります。が、その手間より、高い安全性が得られるメリットのほうが大きいはずです。
シンプルに移行するなら、FROM のイメージを変えるだけで済みます。まずは、Trivyで脆弱性がどれだけ減るか、チェックしてみてはいかがでしょうか。