https://github.com/okamyuji/dhi-migration
Docker Hardened Images (DHI) migration samples — before/after Dockerfiles for Go, Node.js, Python, and Rails 8 with gitleaks-based secret scanning.
https://github.com/okamyuji/dhi-migration
dhi distroless docker docker-hardened-images dockerfile gitleaks golang nodejs python rails ruby security
Last synced: 10 days ago
JSON representation
Docker Hardened Images (DHI) migration samples — before/after Dockerfiles for Go, Node.js, Python, and Rails 8 with gitleaks-based secret scanning.
- Host: GitHub
- URL: https://github.com/okamyuji/dhi-migration
- Owner: okamyuji
- Created: 2026-05-06T00:36:38.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-09T03:57:12.000Z (15 days ago)
- Last Synced: 2026-06-09T05:26:14.619Z (15 days ago)
- Topics: dhi, distroless, docker, docker-hardened-images, dockerfile, gitleaks, golang, nodejs, python, rails, ruby, security
- Language: Ruby
- Size: 16.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# dhi-migration
Docker Hardened Images (DHI) への移行を、言語別の **before / after** Dockerfile で実例比較するサンプル集です。Zenn 記事の検証用リポジトリとして利用しています。
## 構成
| 言語 | ベース (before) | DHI (after) | サンプルアプリ |
| --- | --- | --- | --- |
| Go 1.25 | `golang:1.25` | `dhi.io/golang:1.25` | `cmd/server` HTTP `/health` |
| Node.js 24 | `node:24-alpine` | `dhi.io/node:24-alpine3.21` | esbuild バンドル + `/health` |
| Python 3.11 | `python:3.11-slim` | `dhi.io/python:3.11-debian12` | venv + `/health` |
| Rails 8 (Ruby 3.4) | `ruby:3.4-slim` | `dhi.io/ruby:3.4-debian12` | API only Rails + Puma `/health` |
各言語ディレクトリは `before/` と `after/` の 2 つの Dockerfile を持ち、同じアプリで「移行前」と「DHI 移行後」のイメージを並べて比較できます。
## 動作確認
例: Rails 8 サンプル
```bash
# before
docker build -t dhi-rails-before rails/before
docker run --rm -p 8080:8080 dhi-rails-before
curl -s localhost:8080/health
# {"status":"ok","service":"dhi-rails-sample","ruby":"3.4.9","rails":"8.1.3"}
# after (DHI)
docker build -t dhi-rails-after rails/after
docker run --rm -p 8081:8080 dhi-rails-after
curl -s localhost:8081/health
# {"status":"ok","service":"dhi-rails-sample","ruby":"3.4.5","rails":"8.1.3"}
```
他言語も `/before` / `/after` を `docker build` するだけで同様に確認できます。
## DHI 適用ポイント
- **builder + runtime の 2 stage** に分離し、ビルド用 `*-dev` イメージとランタイム用 distroless イメージを使い分け
- ランタイムは **`USER nonroot`** で起動
- distroless ランタイムには **シェルが無い** ため、エントリポイントは exec 形式 (`CMD ["..."]`) で指定
- Rails / Python のように **ネイティブの tzdata に依存する処理** は、`tzinfo-data` などのアプリ側パッケージで補う
## セキュリティ
- `pre-commit` で **gitleaks** を実行(コミット前にシークレット検出)
- GitHub Actions でも同じ **gitleaks** をワークフロー実行(push / PR)
- `.gitignore` は Go / Node / Python / Rails / Docker / 一般的な秘密情報パターンを網羅
### pre-commit 導入
```bash
pre-commit install
pre-commit run --all-files
```
## ライセンス
Sample / verification コードのため、特に明示的なライセンスは付与していません。