セキュアなソフトウェアサプライチェーンのためのWolfi Linux上に構築された最小限のゼロCVEコンテナイメージ。
| コマンド | 説明 |
|---|
docker pull cgr.dev/chainguard/static:latest | 最小限の静的ベースイメージをプル |
docker pull cgr.dev/chainguard/busybox:latest | デバッグ用busyboxイメージをプル |
docker pull cgr.dev/chainguard/wolfi-base:latest | シェル付きWolfiベースイメージをプル |
docker pull cgr.dev/chainguard/python:latest | Pythonランタイムイメージをプル |
docker pull cgr.dev/chainguard/node:latest | Node.jsランタイムイメージをプル |
docker pull cgr.dev/chainguard/go:latest | Goビルドイメージをプル |
docker pull cgr.dev/chainguard/nginx:latest | nginx Webサーバーイメージをプル |
docker pull cgr.dev/chainguard/git:latest | 最小限のgitイメージをプル |
docker pull cgr.dev/chainguard/jdk:latest | Java JDKイメージをプル |
docker pull cgr.dev/chainguard/rust:latest | Rustビルドイメージをプル |
docker pull cgr.dev/chainguard/redis:latest | Redisサーバーイメージをプル |
docker pull cgr.dev/chainguard/postgres:latest | PostgreSQLイメージをプル |
docker pull cgr.dev/chainguard/curl:latest | 最小限のcurlイメージをプル |
| コマンド | 説明 |
|---|
:latestタグ | 最新ビルド、本番環境対応 |
:latest-devタグ | シェルとパッケージマネージャー付きの開発バリアント |
-devイメージの:latest | apk、シェル、デバッグツールを含む |
cgr.dev/chainguard-private/IMAGE | プライベート/エンタープライズイメージレジストリ |
ダイジェスト固定@sha256:abc123... | 再現性のために正確なイメージビルドに固定 |
| コマンド | 説明 |
|---|
FROM cgr.dev/chainguard/static:latest | Dockerfileで静的イメージを使用 |
FROM cgr.dev/chainguard/python:latest-dev | pipとシェル付きの開発バリアントを使用 |
FROM cgr.dev/chainguard/node:latest AS build | ビルドステージとして使用 |
FROM cgr.dev/chainguard/go:latest AS builder | コンパイル用にGoイメージを使用 |
docker run --rm cgr.dev/chainguard/wolfi-base sh | インタラクティブシェルを実行 |
docker run --rm -p 8080:8080 cgr.dev/chainguard/nginx | nginxサーバーを実行 |
docker run --rm cgr.dev/chainguard/python -- python -c "print('hello')" | Pythonワンライナーを実行 |
# ビルドステージ
FROM cgr.dev/chainguard/go:latest AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /server ./cmd/server
# ランタイムステージ - distroless、シェルなし、パッケージマネージャーなし
FROM cgr.dev/chainguard/static:latest
COPY --from=builder /server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
# pipが利用可能なビルドステージ
FROM cgr.dev/chainguard/python:latest-dev AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
COPY . .
# ランタイムステージ - 最小限のPython、pip・シェルなし
FROM cgr.dev/chainguard/python:latest
COPY --from=builder /install /usr/local
COPY --from=builder /app /app
WORKDIR /app
ENTRYPOINT ["python", "-m", "myapp"]
# ビルドステージ
FROM cgr.dev/chainguard/node:latest-dev AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# ランタイムステージ
FROM cgr.dev/chainguard/node:latest
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
ENTRYPOINT ["node", "dist/index.js"]
# ビルドステージ
FROM cgr.dev/chainguard/jdk:latest-dev AS builder
WORKDIR /app
COPY . .
RUN ./gradlew build --no-daemon -x test
# ランタイムステージ
FROM cgr.dev/chainguard/jre:latest
COPY --from=builder /app/build/libs/app.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
| コマンド | 説明 |
|---|
chainctl auth login | Chainguardで認証 |
chainctl auth login --headless | ヘッドレス環境でログイン |
chainctl auth configure-docker | Chainguardレジストリを使用するようDockerを設定 |
chainctl images list | 利用可能なChainguardイメージを一覧表示 |
chainctl images repos list --group=GROUP_ID | グループのイメージリポジトリを一覧表示 |
chainctl images diff IMAGE1 IMAGE2 | 2つのイメージバージョンを比較 |
chainctl images history cgr.dev/chainguard/python | イメージバージョン履歴を表示 |
images.chainguard.devを参照 | すべてのイメージのWebカタログ |
| コマンド | 説明 |
|---|
crane ls cgr.dev/chainguard/python | イメージの利用可能なタグを一覧表示 |
crane manifest cgr.dev/chainguard/python:latest | イメージマニフェストを表示 |
crane config cgr.dev/chainguard/python:latest | イメージ設定を表示 |
docker inspect cgr.dev/chainguard/python:latest | イメージメタデータを検査 |
docker history cgr.dev/chainguard/python:latest | イメージレイヤーを表示 |
dive cgr.dev/chainguard/python:latest | イメージレイヤーをインタラクティブに探索 |
| コマンド | 説明 |
|---|
cosign verify --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity-regexp='chainguard' cgr.dev/chainguard/python | イメージ署名を検証 |
cosign verify-attestation --type spdx cgr.dev/chainguard/python | SBOMアテステーションを検証 |
cosign verify-attestation --type vuln cgr.dev/chainguard/python | 脆弱性アテステーションを検証 |
cosign tree cgr.dev/chainguard/python | サプライチェーンアーティファクトを表示 |
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/python | SLSAプロベナンスを検証 |
# Chainguardイメージの署名を検証
cosign verify \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest
# SBOMアテステーションを検証して出力
cosign verify-attestation \
--type spdx \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest | jq -r '.payload' | base64 -d | jq .
# 脆弱性スキャンアテステーションを検証
cosign verify-attestation \
--type vuln \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest
| コマンド | 説明 |
|---|
grype cgr.dev/chainguard/python | Grypeでイメージの脆弱性をスキャン |
grype cgr.dev/chainguard/python --only-fixed | 修正可能な脆弱性のみ表示 |
trivy image cgr.dev/chainguard/python | Trivyスキャナーでスキャン |
trivy image --severity HIGH,CRITICAL cgr.dev/chainguard/python | 高/クリティカルのみスキャン |
docker scout cves cgr.dev/chainguard/python | Docker Scoutでスキャン |
chainctl images vulns cgr.dev/chainguard/python | chainctl経由で既知の脆弱性を表示 |
| コマンド | 説明 |
|---|
apk update | パッケージインデックスを更新(devイメージ内) |
apk add curl | パッケージをインストール |
apk add --no-cache python3 py3-pip | インデックスをキャッシュせずにインストール |
apk add --virtual .build-deps gcc musl-dev | 仮想ビルド依存関係をインストール |
apk del .build-deps | 仮想パッケージグループを削除 |
apk del curl | パッケージを削除 |
apk list --installed | インストール済みパッケージを一覧表示 |
apk search nginx | 利用可能なパッケージを検索 |
apk info python3 | パッケージの詳細を表示 |
apk info -L python3 | パッケージ内のファイルを一覧表示 |
| コマンド | 説明 |
|---|
melange keygen | パッケージ用の署名鍵を生成 |
melange build recipe.yaml --signing-key melange.rsa | レシピからAPKパッケージをビルド |
melange build recipe.yaml --arch x86_64,aarch64 | 複数アーキテクチャ向けにビルド |
melange bump recipe.yaml 1.2.3 | レシピのバージョンをバンプ |
package:
name: myapp
version: 1.0.0
epoch: 0
description: My custom application
copyright:
- license: Apache-2.0
environment:
contents:
packages:
- build-base
- go
- ca-certificates-bundle
pipeline:
- uses: git-checkout
with:
repository: https://github.com/org/myapp
tag: v${{package.version}}
- uses: go/build
with:
packages: ./cmd/myapp
output: myapp
ldflags: -s -w
- uses: strip
| コマンド | 説明 |
|---|
apko build config.yaml tag output.tar | YAML設定からOCIイメージをビルド |
apko publish config.yaml tag | イメージをビルドしてレジストリにプッシュ |
apko build config.yaml tag output.tar --arch x86_64,aarch64 | マルチアーキテクチャイメージをビルド |
docker load < output.tar | ビルドしたイメージをDockerにロード |
contents:
packages:
- ca-certificates-bundle
- wolfi-baselayout
- myapp
repositories:
- https://packages.wolfi.dev/os
- /path/to/local/packages
accounts:
groups:
- groupname: nonroot
gid: 65532
users:
- username: nonroot
uid: 65532
gid: 65532
run-as: 65532
entrypoint:
command: /usr/bin/myapp
archs:
- x86_64
- aarch64
environment:
APP_ENV: production
PORT: "8080"
| コマンド | 説明 |
|---|
cosign download sbom cgr.dev/chainguard/python | イメージSBOMをダウンロード |
syft cgr.dev/chainguard/python | SyftでSBOMを生成 |
syft cgr.dev/chainguard/python -o spdx-json | SPDX SBOMを生成 |
syft cgr.dev/chainguard/python -o cyclonedx-json | CycloneDX SBOMを生成 |
cosign download attestation cgr.dev/chainguard/python | すべてのアテステーションをダウンロード |
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/python | SLSAプロベナンスを検証 |
chainctl images vulns cgr.dev/chainguard/python | 既知の脆弱性を表示 |
# Sigstore Policy Controller - Chainguard署名を要求
apiVersion: policy.sigstore.dev/v1beta1
kind: ClusterImagePolicy
metadata:
name: require-chainguard-signatures
spec:
images:
- glob: "cgr.dev/chainguard/**"
- glob: "cgr.dev/chainguard-private/**"
authorities:
- keyless:
url: https://fulcio.sigstore.dev
identities:
- issuerRegExp: ".*"
subjectRegExp: ".*chainguard.*"
ctlog:
url: https://rekor.sigstore.dev
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-chainguard-images
spec:
validationFailureAction: Enforce
background: true
rules:
- name: check-image-registry
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Only Chainguard images from cgr.dev are allowed."
pattern:
spec:
containers:
- image: "cgr.dev/chainguard/*"
initContainers:
- image: "cgr.dev/chainguard/*"
# GitHub Actions - デプロイ前に検証とスキャン
name: Image Verification
on:
push:
branches: [main]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- name: Install cosign
uses: sigstore/cosign-installer@v3
- name: Verify image signature
run: |
cosign verify \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest
- name: Scan for vulnerabilities
uses: anchore/grype-action@v0
with:
image: cgr.dev/chainguard/python:latest
fail-on: high
-
マルチステージビルドを使用する — -devイメージ(コンパイラとパッケージマネージャーを含む)でビルドし、最終成果物のみを最小限のランタイムイメージにコピーしましょう。
-
ダイジェストでイメージを固定する — 本番デプロイではタグの代わりに@sha256:...ダイジェストを使用し、再現性を保証しましょう。
-
適切なベースイメージを選択する — OS依存関係のないコンパイル済みバイナリにはstaticを、シェルが必要な場合はwolfi-baseを、インタープリタ言語には言語固有のイメージを使用しましょう。
-
CI/CDで署名を検証する — ビルドやデプロイの前に、必ずcosignでChainguardイメージの署名を検証しましょう。
-
ゼロCVEイメージでもスキャンする — 検証ステップとして脆弱性スキャンを実行しましょう。Chainguardイメージはゼロの結果を返すはずで、パイプラインが本物のイメージを使用していることを確認できます。
-
-devバリアントはビルドステージでのみ使用する — -devイメージを本番環境に出荷しないでください。攻撃対象を増加させるツールが含まれています。
-
nonrootとして実行する — Chainguardイメージはデフォルトでnonrootユーザーです。Dockerfileでrootに切り替えずにこれを維持しましょう。
-
イメージポリシーを適用する — Kyverno、OPA Gatekeeper、またはSigstore Policy Controllerを使用して、クラスター内のコンテナレジストリを制限しましょう。
-
SBOMを生成して保存する — SyftまたはcosignでSBOMをダウンロードし、コンプライアンスと監査証跡に活用しましょう。
-
イメージを最新に保つ — Chainguardはイメージを頻繁に再ビルドします。最新のセキュリティパッチを取得するためにダイジェストを定期的に更新しましょう。