Chainguard Images
صور حاويات مصغرة خالية من الثغرات مبنية على Wolfi Linux لسلاسل توريد البرمجيات الآمنة.
سحب الصور
Section titled “سحب الصور”| الأمر | الوصف |
|---|---|
docker pull cgr.dev/chainguard/static:latest | سحب صورة قاعدة ثابتة مصغرة |
docker pull cgr.dev/chainguard/busybox:latest | سحب صورة busybox للتصحيح |
docker pull cgr.dev/chainguard/wolfi-base:latest | سحب صورة Wolfi الأساسية مع shell |
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 |
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 مصغرة |
وسوم الصور
Section titled “وسوم الصور”| الأمر | الوصف |
|---|---|
وسم :latest | أحدث بناء، جاهز للإنتاج |
وسم :latest-dev | نسخة تطوير مع shell ومدير حزم |
:latest على صور -dev | تتضمن apk و shell وأدوات التصحيح |
cgr.dev/chainguard-private/IMAGE | سجل صور خاص/مؤسسي |
تثبيت بالبصمة @sha256:abc123... | تثبيت بناء الصورة بالضبط لضمان إعادة الإنتاج |
استخدام الصور
Section titled “استخدام الصور”الاستخدام الأساسي
Section titled “الاستخدام الأساسي”| الأمر | الوصف |
|---|---|
FROM cgr.dev/chainguard/static:latest | استخدام الصورة الثابتة في Dockerfile |
FROM cgr.dev/chainguard/python:latest-dev | استخدام نسخة dev مع pip و shell |
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 | تشغيل shell تفاعلي |
docker run --rm -p 8080:8080 cgr.dev/chainguard/nginx | تشغيل خادم nginx |
docker run --rm cgr.dev/chainguard/python -- python -c "print('hello')" | تشغيل أمر Python سريع |
بناء Go متعدد المراحل
Section titled “بناء Go متعدد المراحل”# مرحلة البناء
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
# مرحلة التشغيل - بدون توزيعة، بدون shell، بدون مدير حزم
FROM cgr.dev/chainguard/static:latest
COPY --from=builder /server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
بناء Python متعدد المراحل
Section titled “بناء Python متعدد المراحل”# مرحلة البناء مع 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، بدون shell
FROM cgr.dev/chainguard/python:latest
COPY --from=builder /install /usr/local
COPY --from=builder /app /app
WORKDIR /app
ENTRYPOINT ["python", "-m", "myapp"]
بناء Node.js متعدد المراحل
Section titled “بناء Node.js متعدد المراحل”# مرحلة البناء
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"]
بناء Java متعدد المراحل
Section titled “بناء Java متعدد المراحل”# مرحلة البناء
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"]
الاكتشاف
Section titled “الاكتشاف”عمليات Chainctl
Section titled “عمليات Chainctl”| الأمر | الوصف |
|---|---|
chainctl auth login | المصادقة مع Chainguard |
chainctl auth login --headless | تسجيل الدخول في بيئات بدون واجهة |
chainctl auth configure-docker | تكوين Docker لاستخدام سجل Chainguard |
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 | كتالوج ويب لجميع الصور |
فحص الصور
Section titled “فحص الصور”| الأمر | الوصف |
|---|---|
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 | استكشاف طبقات الصورة بشكل تفاعلي |
التحقق
Section titled “التحقق”التحقق من التوقيع
Section titled “التحقق من التوقيع”| الأمر | الوصف |
|---|---|
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 |
مثال التحقق بـ Cosign
Section titled “مثال التحقق بـ Cosign”# التحقق من توقيع صورة 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
فحص الثغرات
Section titled “فحص الثغرات”| الأمر | الوصف |
|---|---|
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 |
إدارة حزم Wolfi APK
Section titled “إدارة حزم Wolfi APK”عمليات الحزم
Section titled “عمليات الحزم”| الأمر | الوصف |
|---|---|
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 | عرض ملفات الحزمة |
بناء صور مخصصة
Section titled “بناء صور مخصصة”بناء حزم Melange
Section titled “بناء حزم Melange”| الأمر | الوصف |
|---|---|
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 | رفع الإصدار في الوصفة |
مثال وصفة Melange
Section titled “مثال وصفة Melange”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
Section titled “بناء صور Apko”| الأمر | الوصف |
|---|---|
apko build config.yaml tag output.tar | بناء صورة OCI من تكوين YAML |
apko publish config.yaml tag | بناء ودفع الصورة إلى السجل |
apko build config.yaml tag output.tar --arch x86_64,aarch64 | بناء صورة متعددة المعماريات |
docker load < output.tar | تحميل الصورة المبنية إلى Docker |
مثال تكوين Apko
Section titled “مثال تكوين Apko”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"
قائمة مواد البرمجيات والمصدر
Section titled “قائمة مواد البرمجيات والمصدر”عناصر سلسلة التوريد
Section titled “عناصر سلسلة التوريد”| الأمر | الوصف |
|---|---|
cosign download sbom cgr.dev/chainguard/python | تنزيل SBOM الصورة |
syft cgr.dev/chainguard/python | إنشاء SBOM باستخدام Syft |
syft cgr.dev/chainguard/python -o spdx-json | إنشاء SBOM بتنسيق SPDX |
syft cgr.dev/chainguard/python -o cyclonedx-json | إنشاء SBOM بتنسيق CycloneDX |
cosign download attestation cgr.dev/chainguard/python | تنزيل جميع الشهادات |
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/python | التحقق من مصدر SLSA |
chainctl images vulns cgr.dev/chainguard/python | عرض الثغرات المعروفة |
تطبيق السياسات
Section titled “تطبيق السياسات”سياسة قبول Kubernetes
Section titled “سياسة قبول Kubernetes”# 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
مثال سياسة Kyverno
Section titled “مثال سياسة Kyverno”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: "يُسمح فقط بصور Chainguard من cgr.dev."
pattern:
spec:
containers:
- image: "cgr.dev/chainguard/*"
initContainers:
- image: "cgr.dev/chainguard/*"
خط أنابيب التحقق CI/CD
Section titled “خط أنابيب التحقق CI/CD”# 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
أفضل الممارسات
Section titled “أفضل الممارسات”-
استخدام البناء متعدد المراحل — البناء في صور
-dev(التي تحتوي على مُجمّعات ومديري حزم) ونسخ القطعة النهائية فقط إلى صورة التشغيل المصغرة. -
تثبيت الصور بالبصمة — استخدام بصمات
@sha256:...بدلاً من الوسوم لعمليات النشر الإنتاجية لضمان إعادة الإنتاج. -
اختيار الصورة الأساسية الصحيحة — استخدام
staticللثنائيات المُجمّعة بدون تبعيات نظام التشغيل،wolfi-baseعند الحاجة إلى shell، والصور الخاصة باللغة للغات المُفسّرة. -
التحقق من التوقيعات في CI/CD — التحقق دائماً من توقيعات صور Chainguard باستخدام cosign قبل البناء أو النشر.
-
فحص حتى صور خالية من الثغرات — تشغيل فحوصات الثغرات كخطوة تحقق؛ يجب أن تُرجع صور Chainguard صفر نتائج، مما يؤكد أن خط الأنابيب يستخدم صوراً أصلية.
-
استخدام نسخ
-devفي مراحل البناء فقط — لا تُرسل أبداً صور-devإلى الإنتاج؛ فهي تتضمن أدوات تزيد سطح الهجوم. -
التشغيل كـ nonroot — صور Chainguard تستخدم افتراضياً مستخدم nonroot؛ حافظ على ذلك في ملفات Dockerfile بعدم التبديل إلى root.
-
تطبيق سياسات الصور — استخدام Kyverno أو OPA Gatekeeper أو Sigstore Policy Controller لتقييد سجلات الحاويات في مجموعاتك.
-
إنشاء وتخزين SBOMs — استخدام Syft أو cosign لتنزيل SBOMs للامتثال ومسارات التدقيق.
-
الحفاظ على تحديث الصور — تُعيد Chainguard بناء الصور بشكل متكرر؛ قم بتحديث بصماتك بانتظام للحصول على أحدث إصلاحات الأمان.