ENECHANGE Developer Blog

ENECHANGE開発者ブログ

安全性の高い「Docker Hardened Images」を運用して気づいた点

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件に減りました。

脆弱性は新たに発見されたり対応されたりするので、現時点での結果も比較してみます。

$ 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で脆弱性がどれだけ減るか、チェックしてみてはいかがでしょうか。