GH GambleHub

الحاويات: Docker و OCI

الحاويات: Docker و OCI

1) المفاهيم والمعايير الأساسية لـ OCI

OCI Image Spec - تنسيق الصورة (مظهر، تهيئة، طبقات، فهرس لعدة قوس).
مواصفات وقت التشغيل OCI - كيفية تشغيل حاوية (حزمة، "كونفيج. json ') ؛ التنفيذ: Runc وكذلك gVisor، حاويات كاتا.
مواصفات توزيع OCI - التفاعل مع السجلات (الدفع/السحب، الإذن).

Docker = UX والنظام البيئي حول OCI: Dockerfile/BuildKit/CLI/Compose/Hub. في Kubernetes، يتم استبدال Docker Engine بالحاويات/CRI-O، لكن تنسيق الصورة هو نفسه.

2) المظاهر: طبقات، علامات، بيانات وصفية

Образ = слои (نظام ملفات متعدد الطبقات) + config (entrypoint/cmd/env/labels) + manifest.
العلامات: لا تستخدم «: الأحدث» في الحث ؛ التثبيت: 1. 21. 3 '، git-SHA أو التاريخ + SHA.
الملصق: المالك، الاتصال، vcs-url، org. openctainers. (العنوان، الوصف، التنقيح، المصدر).
متعدد القوس: يعطي بيان المؤشر الخيار الصحيح لـ «amd64/arm64».

3) البناء: Dockerfile، BuildKit، متعدد المراحل

3. 1 المبادئ

تقليل الطبقات، إصلاح الإصدارات، تنظيف مخابئ مدير الحزم.
نسخ أولاً ملفات البيان/القفل، ثم "تشغيل تثبيت deps' - يحسن ذاكرة التخزين المؤقت.
مطلوب dockerignore (باستثناء '.git'، القطع الأثرية، الأسرار).
وتُفضَّل أمثلة على القواعد غير المستقرة/الألبية/الدنيا.

3. 2 رقائق BuildKit

بناء متوازي، أسرار في التجميع ('--secret')، حوامل مخبأ، بناء لقوس متعددة.

مثال لحامل مخبأ:
dockerfile syntax=docker/dockerfile:1. 6
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements. txt

3. 3 أمثلة متعددة المراحل

اذهب (مرتبط بشكل ثابت، غير مقيد):
dockerfile syntax=docker/dockerfile:1. 6
FROM golang:1. 23 AS build
WORKDIR /src
COPY go. mod go. sum./
RUN go mod download
COPY..
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o /app

FROM gcr. io/distroless/static:nonroot
USER 65532:65532
COPY --from=build /app /app
ENTRYPOINT ["/app"]
عقدة. js (prod-layer without dev-deps):
dockerfile syntax=docker/dockerfile:1. 6
FROM node:22-alpine AS deps
WORKDIR /app
COPY package. json./
RUN npm ci --omit=dev

FROM node:22-alpine AS build
WORKDIR /app
COPY --from=deps /app/node_modules./node_modules
COPY..
RUN npm run build

FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=deps /app/node_modules./node_modules
COPY --from=build /app/dist./dist
USER node
CMD ["node","dist/server. js"]
بايثون (кеш عجلات، غير جذرية):
dockerfile syntax=docker/dockerfile:1. 6
FROM python:3. 12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
WORKDIR /app

FROM base AS deps
RUN --mount=type=cache,target=/root/.cache/pip pip install --upgrade pip
COPY requirements. txt.
RUN --mount=type=cache,target=/root/.cache/pip pip wheel --wheel-dir=/wheels -r requirements. txt

FROM base
COPY --from=deps /wheels /wheels
RUN pip install --no-index --find-links=/wheels -r /app/requirements. txt && rm -rf /wheels
COPY..
USER 1000:1000
CMD ["python","-m","app"]
جافا (JLink/Layered Spring):
dockerfile syntax=docker/dockerfile:1. 6
FROM maven:3. 9-eclipse-temurin-21 AS build
WORKDIR /src
COPY pom. xml./
RUN mvn -q -e -DskipTests dependency:go-offline
COPY..
RUN mvn -q -DskipTests package

FROM eclipse-temurin:21-jre
WORKDIR /app
COPY --from=build /src/target/app. jar /app/app. jar
ENTRYPOINT ["java","-XX:+UseContainerSupport","-jar","/app/app. jar"]

4) الحد الأدنى من الصور، PID 1 والإشارات

غير معطل - سطح هجوم أصغر، لا يوجد مدير قذيفة/عبوة.

يجب أن يعمل PID 1 بالوكالة بشكل صحيح، وإلا "عمليات الزومبي. "استخدم" ENTRYPOINT "في شكل تنفيذي و tini/init init:
dockerfile
ENTRYPOINT ["tini","--","/app"]

«HEALTHCHECK» معقول (التردد/المهلة، لا يوجد حمل غير ضروري).

5) أمن الحاويات

5. 1 السياسات والتشدد

غير جذري (مستخدم)، عديم الجذور Docker/حاويات.
القدرات: إزالة غير ضرورية ('-cap-drop = ALL -cap-Add = NET _ BIND _ SERVICE'، إلخ).
seccomp/AppArmor/SELinux: تمكين الملفات الشخصية الافتراضية أو الصارمة.
اقرأ فقط FS + 'tmpfs' для '/tmp'، لا امتيازات جديدة.
الأسرار: ليس في الصور ؛ من مدير أسرار K8s/vault/docker.

5. 2 سلسلة التوريد

SBOM (CycloneDX/SPDX) والمسح الضوئي (Trivy/Grype).
التوقيع (التجميل، المتجر) وسياسة السحب (التحقق).
التدريبات على التحديثات: يتم إعادة بناء الصور الأساسية مع تصحيحات CVE بانتظام.

6) سائقي التخزين والملفات

الافتراضي هو فوق 2 (سريع ومستقر). في البيئات عديمة الجذور، غالبًا ما تكون الصمامات الفوقية.
أحجام البيانات والمخابئ، والربط بين التنمية.
لا تكتب إلى «/» - استخدم مسار البيانات («/البيانات »)، حالة منفصلة عن الصورة.

7) الشبكة و DNS

شبكات Docker: الجسر (الافتراضي)، المضيف (الحد الأدنى من النفقات العلوية، تنازع الموانئ)، لا شيء، macvlan/ipvlan (التكامل L2/L3).
يأخذ Docker DNS resolver/daemon من المضيف. جسون ؛ للحث، قم بتكوين ذاكرة التخزين المؤقت المحلية.
في عام K8s، تدير الشبكة CNI (Calico/Cilium/Flannel). للعربة الجانبية/الشبكية - اعتراضات (قابلة للتطبيق).

8) الموارد و QoS (cgroups v2)

القيود: '-cpus'،' -- memory '،' -- pids-limit'، '-cuset-cpus'.
تحديد الطلبات/الحدود (K8s) → يؤثر على الجدول الزمني ورصد الجودة.
راقب OOMKilled، والاختناق، وارتفاعات زمن الوصول بسبب GC/IO.

أمثلة الإطلاق:
bash docker run --cpus=1. 5 --memory=512m --pids-limit=256 --read-only --tmpfs /tmp:rw,size=64m...

9) الجذوع وقابلية الملاحظة

محركات سجل: 'json-file' (مع التناوب)، 'journal'، 'gelf'، 'awslogs'،' syslog '.

إعداد التناوب:
json
{ "log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"5"} }

المقاييس: Docker Engine API, cAdvisor, node exportors; تعقب من خلال عامل في حاوية أو سيارة جانبية.

10) السجلات والتوثيق

السجلات الخاصة: سجل الحاويات ECR/GCR/ACR/Harbour/GitHub.
Docker Hub ؛ استخدام المرايا/المخابئ (مخبأ التسجيل).
سياسة الاحتفاظ/العلامات الثابتة، التكرار بين المناطق.
«تسجيل دخول docker» غير مخزن في نصوص ؛ استخدم أسرار CI واتحاد OIDC.

11) docker-compose vs orchestrators

التكوين - التنمية/التكامل المحلي.
Прод: Kubernetes (النشر/StatefulSet/DaemonSet، الدخول، الأسرار، PVC) с الحاويات/CRI-O ؛ والسياسات الأمنية واستراتيجيات التنفيذ.
السرب عفا عليه الزمن للمبيعات الكبيرة، وهو مناسب للمجموعات البسيطة.

مثال:
yaml version: "3. 9"
services:
api:
build:.
ports: ["8080:8080"]
environment: ["DB_URL=postgres://pg/DB"]
depends_on: ["pg"]
pg:
image: postgres:16-alpine volumes: ["pgdata:/var/lib/postgresql/data"]
volumes: { pgdata: {} }

12) الفحص الصحي، ابدأ/توقف، إغلاق رشيق

استخدم «HEALTHCHECK» مع قيود المهلة و «التجديدات».
الرشيقة الصحيحة: امسك SIGTERM، وأنهي الاتصالات الواردة، وأغلق الاتصالات، ثم اخرج.
В K8s: 'Pre Stop' hook + 'enderencyGracePeriodSeconds'، الاستعداد перед.

13) أفضل الممارسات حسب اللغة/المكدس (موجز)

العقدة: «npm ci»، «NODE _ ENV = الإنتاج»، تعطيل dev-deps في وقت التشغيل، «-heapsnapshot»، «uWS/GZip» خلف وكيل L7.
Python: العجلات، "gunicorn - graceful-timeout'،" GTHREADs'/" UVICorn' بواسطة وحدة المعالجة المركزية، لا تخزن Venv بلا داع داخل طبقة مشتركة.
اذهب: CGO off (إن أمكن)،' -ldflags =» -s -w «، distrucless/static، 'GOMAXPROCS 'بواسطة مجموعات.
جافا: طبقات JAR، «-XX: MaxRAMPercentage»، CDS/Layered JAR للتخزين المؤقت.

14) سلسلة التوريد وسياسة الصورة

قم بإنشاء SBOM على CI، وحفظه بجوار القطعة الأثرية.
مسح الصور على كل كلب ؛ بوابة إلى CVEs الحرجة.
توقيع الصور (تجميل)، تمكين مراقب السياسة (K8s - Kyverno/Conftest/Gatekeeper).
إنشاء وتشغيل حسابات/شبكات منفصلة ؛ التبعيات المخبأة في السجل الخاص.

15) الأنماط المضادة

': آخر' في الحث ؛ عدم وجود علامات ثابتة.
تجميع «داخل مضيف الإنتاج» دون عزل ؛ تخزين الأسرار في Dockerfile.
يعمل كجذر، «- محروم»، قدرات واسعة.
صور سميكة (> 1-2 جيجابايت)، لا شيء. dockernore.
يشكل المنطق الداخلي في ENTRYPOINT من خلال الغلاف مشاكل إشارة →.
اكتب البيانات الثابتة إلى طبقة الحاوية بدلاً من الحجم.
Healthcheck، الذي يقدم طلبات باهظة الثمن إلى prod-DB.

16) قائمة التنفيذ المرجعية (0-45 يوما)

0-10 أيام

توحيد Dockerfile (متعدد المراحل، .dockerignore، LABEL، قاعدة مثبتة).
قم بتضمين BuildKit/buildx، حوامل ذاكرة التخزين المؤقت لمديري الحزم.
قم بالتبديل إلى الملفات الشخصية الافتراضية غير الجذرية و «seccomp »/AppArmor/SELinux.

11-25 يومًا

تقليل صور وقت التشغيل (جبال الألب/غير المجهزة)، وترتيب الأشياء مع جذوع الأشجار (الدوران).
ضع حدودًا للموارد، شيكات صحية، صحيح PID 1/tini.
رفع السجل/المخبأ الخاص، وربط ماسح CVE وجيل SBOM.

26-45 يومًا

أدخل توقيع الصورة وسياسة القبول العنقودي.
تنظيم خدمات متعددة الأقواس (amd64/arm64) للخدمات المطلوبة.
دفتر تشغيل بناء/إصدار الوثائق، حجم البناء/الضعف/التقرير الزمني.

17) مقاييس النضج

العلامات الثابتة والتجمعات القابلة للتكرار ≥ 95٪ من الخدمات.
متوسط حجم صورة وقت التشغيل هو أقل من 200-300 ميجابايت (مكدس).
100٪ من حاويات الحث غير جذرية، مع قدرات محدودة و FS للقراءة فقط.
مسح SBOM و CVE لكل دفعة ؛ → يتم حظر مركبات الكربون الكلورية فلورية الحرجة.
توقيع الصور وإنفاذ السياسات في البيئات.
وقت البدء البارد للحاوية ≤ الهدف SLO (على سبيل المثال 2-5 ثوانٍ)، الإغلاق الرشيق الصحيح.

18)

حاوية البالغين هي معايير OCI + بناء الانضباط + الأمن الافتراضي + سياسة المراقبة والتسليم. استخدم متعدد المراحل و BuildKit، وقلل من صور وقت التشغيل، وقم بتشغيل غير جذري تحت ملفات تعريف صارمة، وإصلاح العلامات، والمسح الضوئي والتوقيع، وإبقاء السجلات/الموارد/الشبكة تحت السيطرة. لذلك ستصبح الحاويات الأساس الذي يمكن التنبؤ به ويمكن التحكم فيه لمنصتك - من التطوير إلى الإنتاج.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.