콘텐츠로 이동

Chainguard Images

안전한 소프트웨어 공급망을 위해 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:latestPython 런타임 이미지 풀
docker pull cgr.dev/chainguard/node:latestNode.js 런타임 이미지 풀
docker pull cgr.dev/chainguard/go:latestGo 빌드 이미지 풀
docker pull cgr.dev/chainguard/nginx:latestnginx 웹 서버 이미지 풀
docker pull cgr.dev/chainguard/git:latest최소 git 이미지 풀
docker pull cgr.dev/chainguard/jdk:latestJava JDK 이미지 풀
docker pull cgr.dev/chainguard/rust:latestRust 빌드 이미지 풀
docker pull cgr.dev/chainguard/redis:latestRedis 서버 이미지 풀
docker pull cgr.dev/chainguard/postgres:latestPostgreSQL 이미지 풀
docker pull cgr.dev/chainguard/curl:latest최소 curl 이미지 풀
명령어설명
:latest 태그가장 최신 빌드, 프로덕션 준비 완료
:latest-dev 태그셸 및 패키지 관리자 포함 개발 변형
:latest -dev 이미지apk, 셸, 디버깅 도구 포함
cgr.dev/chainguard-private/IMAGE프라이빗/엔터프라이즈 이미지 레지스트리
다이제스트 고정 @sha256:abc123...재현성을 위한 정확한 이미지 빌드 고정
명령어설명
FROM cgr.dev/chainguard/static:latestDockerfile에서 정적 이미지 사용
FROM cgr.dev/chainguard/python:latest-devpip과 셸 포함 dev 변형 사용
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/nginxnginx 서버 실행
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

# 런타임 스테이지 - 디스트로리스, 셸 없음, 패키지 관리자 없음
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 loginChainguard 인증
chainctl auth login --headless헤드리스 환경에서 로그인
chainctl auth configure-dockerChainguard 레지스트리를 사용하도록 Docker 구성
chainctl images list사용 가능한 Chainguard 이미지 목록
chainctl images repos list --group=GROUP_ID그룹의 이미지 리포 목록
chainctl images diff IMAGE1 IMAGE2두 이미지 버전 비교
chainctl images history cgr.dev/chainguard/python이미지 버전 히스토리 표시
images.chainguard.dev 브라우징모든 이미지의 웹 카탈로그
명령어설명
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/pythonSBOM 증명 검증
cosign verify-attestation --type vuln cgr.dev/chainguard/python취약점 증명 검증
cosign tree cgr.dev/chainguard/python공급망 아티팩트 보기
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/pythonSLSA 출처 검증
# 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/pythonGrype로 이미지 취약점 스캔
grype cgr.dev/chainguard/python --only-fixed수정 가능한 취약점만 표시
trivy image cgr.dev/chainguard/pythonTrivy 스캐너로 스캔
trivy image --severity HIGH,CRITICAL cgr.dev/chainguard/python높음/심각만 스캔
docker scout cves cgr.dev/chainguard/pythonDocker Scout로 스캔
chainctl images vulns cgr.dev/chainguard/pythonchainctl로 알려진 취약점 보기
명령어설명
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: 커스텀 애플리케이션
  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.tarYAML 설정에서 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/pythonSyft로 SBOM 생성
syft cgr.dev/chainguard/python -o spdx-jsonSPDX SBOM 생성
syft cgr.dev/chainguard/python -o cyclonedx-jsonCycloneDX SBOM 생성
cosign download attestation cgr.dev/chainguard/python모든 증명 다운로드
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/pythonSLSA 출처 검증
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: "cgr.dev의 Chainguard 이미지만 허용됩니다."
        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
  1. 멀티 스테이지 빌드 사용-dev 이미지(컴파일러와 패키지 관리자 포함)에서 빌드하고 최종 아티팩트만 최소 런타임 이미지로 복사합니다.

  2. 다이제스트로 이미지 고정 — 재현성을 보장하기 위해 프로덕션 배포에 태그 대신 @sha256:... 다이제스트를 사용합니다.

  3. 적절한 베이스 이미지 선택 — OS 의존성 없는 컴파일된 바이너리에는 static, 셸이 필요할 때는 wolfi-base, 인터프리터 언어에는 언어별 이미지를 사용합니다.

  4. CI/CD에서 서명 검증 — 빌드 또는 배포 전에 항상 cosign으로 Chainguard 이미지 서명을 검증합니다.

  5. 제로-CVE 이미지도 스캔 — 검증 단계로 취약점 스캔을 실행합니다. Chainguard 이미지는 제로 결과를 반환해야 하며, 파이프라인이 정품 이미지를 사용하고 있음을 확인합니다.

  6. -dev 변형은 빌드 스테이지에서만 사용-dev 이미지를 프로덕션에 배포하지 마세요. 공격 표면을 증가시키는 도구가 포함되어 있습니다.

  7. nonroot로 실행 — Chainguard 이미지는 기본적으로 nonroot 사용자를 사용합니다. Dockerfile에서 root로 전환하지 마세요.

  8. 이미지 정책 시행 — Kyverno, OPA Gatekeeper, 또는 Sigstore Policy Controller를 사용하여 클러스터에서 컨테이너 레지스트리를 제한합니다.

  9. SBOM 생성 및 저장 — 컴플라이언스와 감사 추적을 위해 Syft 또는 cosign을 사용하여 SBOM을 다운로드합니다.

  10. 이미지를 최신 상태로 유지 — Chainguard는 이미지를 자주 재빌드합니다. 최신 보안 패치를 적용하기 위해 정기적으로 다이제스트를 업데이트하세요.