
2026/02/01 4:58
**Show HN:** *Minimal – オープンソース・コミュニティ主導のハード化済みコンテナイメージ*
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
プロジェクトは minimal, daily‑rebuilt container images のセットを提供します―
minimal‑python、minimal‑node、minimal‑bun、minimal‑go、minimal‑nginx、minimal‑httpd、minimal‑jenkins、minimal‑redis‑slim、および minimal‑postgres‑slim。各イメージは Chainguard の apko ツールを使って Wolfi packages からビルドされ、Trivy でスキャンして CRITICAL または HIGH 検出時にブロックする CVE ゲートを適用し、cosign(キー無し)で署名し、完全な SPDX SBOM とともに公開されます。すべてのイメージはデフォルトで非 root ユーザーとして実行されます(ほとんどが 65532、Jenkins が 1000、Postgres が 70)、そして数少ないものだけがトランジティブ Wolfi 依存関係を介してシェルを含みます。
ビルドパイプラインは 2 AM UTC に最新の Wolfi パッチを取得し、イメージを再構築し、CVE ゲートに合格した場合に公開します。
main へのマージは設定変更をトリガーし、手動ディスパッチで緊急再構築が可能です。このワークフローにより、脆弱性パッチは 48 時間以内 に適用され、Debian(約30日遅延)などの従来の配布よりも遥かに高速です。
各イメージについて、典型的なユースケース(アプリランタイムの実行、リバースプロキシとしての動作、CI/CD コントローラとしての機能、データストア/データベースとしての利用)を示すクイックスタート Docker コマンドが提供されます。ユーザーは
cosign verify と Sigstore OIDC issuer およびアイデンティティ正規表現を使用してプロビナンスを検証できます。
このプロジェクトは MIT ライセンス であり、第三者パッケージは Wolfi や他のオープンソースライセンス(Apache‑2.0、MIT、GPL、LGPL、BSD)から取得され、すべて各イメージの SBOM に列挙されています。このアプローチにより、安全で再現可能なコンテナが最小限の攻撃面、迅速なパッチ適用、および本番・CI/CD・データストアワークロード向けの明確なプロビナンスを実現します。
本文
Minimal:ハード化済みコンテナイメージ
日々 Chainguard の apko と Wolfi パッケージを使って再構築される、最小限の CVE を備えた本番環境で使用可能なコンテナイメージ集です。必要最低限のパッケージのみを含めることで攻撃面が縮小され、ほぼゼロまたは非常に低い既知脆弱性しか持ちません。
利用可能イメージ
| イメージ | プルコマンド | シェル | 使い道 |
|---|---|---|---|
| Python | | 無し | Python アプリ、マイクロサービス |
| Node.js | | 有り | Node.js アプリ、JavaScript |
| Bun | | 無し | 高速 JavaScript / TypeScript ランタイム |
| Go | | 無し | Go 開発、CGO ビルド |
| Nginx | | 無し | リバースプロキシ、静的ファイル |
| HTTPD | | あるかもしれない* | Apache Web サーバー |
| Jenkins | | 有り | CI/CD 自動化 |
| Redis‑slim | | 無し | インメモリデータストア |
| PostgreSQL‑slim | | 無し | 関係データベース |
*HTTPD、Jenkins、および Node.js は転送依存関係により
sh / busybox を含む場合があります。CI ではシェルの有無は情報として扱われます。
なぜ重要か
コンテナ脆弱性は主要な攻撃ベクトルです。ほとんどのベースイメージには数十もの既知 CVE が含まれ、修正までに何週間も必要になります。
従来のイメージ: あなたのコンテナ: ┌──────────────────┐ ┌──────────────────┐ │ debian:latest │ │ minimal-python │ │ 127 CVEs │ │ 0‑5 CVEs │ │ 修正まで:約30日│ │ 修正まで:<48時間│ └──────────────────┘ └──────────────────┘
インパクト
- SOC 2、FedRAMP、PCI‑DSS などのセキュリティ監査・コンプライアンス要件を満たす
- 最小限でディストレスレスなイメージにより攻撃面を削減
- CVE 公開から 24–48 時間以内にパッチ適用(Debian/Ubuntu は数週間)
- Sigstore による暗号署名と完全な SBOM を備えたサプライチェーンセキュリティ
クイックスタート
# Python – アプリ実行 docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-python:latest /app/main.py # Node.js – アプリ実行 docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-node:latest index.js # Bun – 高速 JavaScript ランタイム docker run --rm ghcr.io/rtvkiz/minimal-bun:latest --version # Go – アプリビルド docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-go:latest build -o /tmp/app . # Nginx – リバースプロキシ docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-nginx:latest # HTTPD – 静的コンテンツ配信 docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-httpd:latest # Jenkins – CI/CD コントローラ docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home ghcr.io/rtvkiz/minimal-jenkins:latest # Redis – インメモリデータストア docker run -d -p 6379:6379 ghcr.io/rtvkiz/minimal-redis-slim:latest # PostgreSQL – 関係データベース docker run -d -p 5432:5432 -v pgdata:/var/lib/postgresql/data ghcr.io/rtvkiz/minimal-postgres-slim:latest
イメージ仕様
| イメージ | バージョン | ユーザー | エントリポイント | 作業ディレクトリ |
|---|---|---|---|---|
| Python | 3.13.x | nonroot (65532) | | |
| Node.js | 22.x LTS | nonroot (65532) | | |
| Bun | latest | nonroot (65532) | | |
| Go | 1.25.x | nonroot (65532) | | |
| Nginx | mainline | nginx (65532) | | |
| HTTPD | 2.4.x | www-data (65532) | | |
| Jenkins | 2.541.x LTS | jenkins (1000) | | |
| Redis | 8.4.x | redis (65532) | | |
| PostgreSQL | 18.x | postgres (70) | | |
イメージのビルドフロー
┌───────────────────────────────────────────────────────┐ │ BUILD PIPELINE │ ├───────────────────────────────────────────────────────┤ │ Package Source → Image Assembly → Verification│ │ ──────────────── ────────────────── ────────────────│ │ Wolfi (pre‑built) ──► apko (OCI image) ──► Trivy (CVE gate) │ │ ▲ ▲ │ │ │ │ │ │ melange (Jenkins, Redis) cosign + SBOM │ └───────────────────────────────────────────────────────┘
更新スケジュール
| トリガー | 実行時期 | 目的 |
|---|---|---|
| スケジュール | 毎日 2:00 AM UTC | Wolfi の最新 CVE パッチを取得 |
| プッシュ | main にマージ時 | 設定変更をデプロイ |
| 手動 | ワークフローディスパッチ | 緊急再構築 |
すべてのビルドは CVE ゲート(CRITICAL/HIGH 以上の脆弱性がないこと)に合格しなければ公開できません。
ローカルでのビルド
# 前提条件 go install chainguard.dev/apko@latest go install chainguard.dev/melange@latest # Jenkins、Redis 用 brew install trivy # または: apt install trivy # すべてのイメージをビルド make build # 特定イメージのみビルド make python make node make bun make go make nginx make httpd make jenkins make redis-slim make postgres-slim # CVE スキャン make scan # テスト実行 make test
プロジェクト構成
minimal/ ├── python/apko/python.yaml # Python イメージ(Wolfi パッケージ) ├── node/apko/node.yaml # Node.js イメージ(Wolfi パッケージ) ├── bun/apko/bun.yaml # Bun イメージ(Wolfi パッケージ) ├── go/apko/go.yaml # Go イメージ(Wolfi パッケージ) ├── nginx/apko/nginx.yaml # Nginx イメージ(Wolfi パッケージ) ├── httpd/apko/httpd.yaml # HTTPD イメージ(Wolfi パッケージ) ├── jenkins/ │ ├── apko/jenkins.yaml # Jenkins イメージ │ └── melange.yaml # JRE ビルド ├── redis-slim/ │ ├── apko/redis.yaml # Redis イメージ │ └── melange.yaml # Redis ソースビルド ├── postgres-slim/apko/postgres.yaml # PostgreSQL イメージ(Wolfi パッケージ) ├── .github/workflows/ │ ├── build.yml # 毎日 CI パイプライン │ ├── update-jenkins.yml # Jenkins バージョン更新 │ ├── update-redis.yml # Redis バージョン更新 │ └── update-wolfi-packages.yml # Wolfi パッケージ更新 ├── Makefile └── LICENSE
セキュリティ機能
- CVE ゲート – CRITICAL/HIGH 脆弱性が検出されたらビルド失敗
- 署名済みイメージ – すべてのイメージは cosign keyless(Sigstore)で署名
- SBOM 生成 – SPDX フォーマットの完全なソフトウェア構成表を出力
- 非 root ユーザー – デフォルトで non‑root で実行
- 最小攻撃面 – 必要最低限のパッケージのみを含む
- シェルなしイメージ – 大部分はシェルを持たない
- 再現性ビルド – apko の宣言型設定により同一構成が保証
署名検証方法
すべてのイメージは Sigstore を介した cosign keyless で署名されています。確認するには:
cosign verify \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ --certificate-identity-regexp https://github.com/rtvkiz/minimal/ \ ghcr.io/rtvkiz/minimal-python:latest
minimal‑python を任意のイメージ名に置き換えてください。成功した出力は、CI パイプラインでビルドされ、改ざんされていないことを示します。
ライセンス
本プロジェクトは MIT License の下で公開されています(
LICENSE ファイル参照)。
サードパーティ製品
コンテナイメージには Wolfi などのソースから取得したパッケージが含まれ、それぞれ Apache‑2.0、MIT、GPL、LGPL、BSD 等のライセンスがあります。各イメージの SBOM に完全なライセンス情報が記載されています。
cosign download sbom ghcr.io/rtvkiz/minimal-python:latest | jq '.packages[].licenseConcluded'