GH GambleHub

בלימה: Docker ו ־ OCI

בלימה: Docker ו ־ OCI

1) מושגים וסטנדרטים בסיסיים של OCI

OCI - תבנית תמונה (מניפסט, קונפיג, שכבות, אינדקס לריבוי קשתות).
מפרט זמן ריצה של OCI - איך להפעיל מיכל (צרור, 'קונפיג. json '); מימוש: Runc כמו גם GVisor, מכולות קאטה.
מפרט הפצת OCI - אינטראקציה עם רשמים (דחיפה/משיכה, אישור).

Docker = UX והמערכת האקולוגית סביב OCI: Dockerfile/Streefice Kit/CLI/Compose/Hub. בקוברנטס, מנוע Docker מוחלף על ידי CRI-O, אך פורמט התמונה זהה.

2) הופעות: שכבות, תגיות, metadata

מערכת קבצים שכבתית (intrypoint/cmd/env/labels) + מניפסט.
תגיות: אל תשתמש ': עדכני' בפרוד; פינג ': 1. 21. 3 ', Git-SHA או תאריך + SHA.
בעלים, קשר, vcs-url, org. אופנקונטרים. (כותרת, תיאור, שינוי, מקור).
Multi-arch: המניפסט נותן את האפשרות הנכונה עבור ”amd64/arm64”.

3) לבנות: Dockerfile, StreeCit, Multi-stage

3. 1 עקרונות

למזער שכבות, לתקן גרסאות, לנקות מטמונים מנהל החבילה.
קודם העתק את קבצי המניפסט/נעילה, לאחר מכן "הפעלה התקנת deps' - משפר את המטמון.
. dockerignore נדרש (לא כולל ”. git”, חפצים, סודות).
דוגמאות של בסיסים מעוותים/אלפיניים/מינימליים מועדפים.

3. 2 שבבי ערכת צילום

בניינים מקבילים, סודות בהרכבה ('--secret'), רכבי מטמון, בניינים עבור רב-קשתות.

דוגמה של הר מטמון:
dockerfile syntax=docker/dockerfile:1. 6
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements. txt

3. 3 דוגמאות מרובות שלבים

Go (מקושר סטטית, מעוות):
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 (פרוד-שכבה ללא 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"]
Python (גלגל-calieve, לא שורש):
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"]
Java (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' בצורת exec וטיני/init init:
dockerfile
ENTRYPOINT ["tini","--","/app"]

"צ 'ק בריא הוא סביר (תדירות/פסק זמן, אין עומס מיותר).

5) אבטחת מכולות

5. 1 מדיניות והתקשות

non-root (USER), Docker/מכולות ללא שורש.
יכולות: הסרת שירות מיותר ('- cap-drop = All - cap-osper = NET _ BIND _ SERVICE', וכו ').
Seccomp/Apparmor/SELinux: אפשר ברירת מחדל או פרופילים קפדניים.
קריאה בלבד FS + 'tmpfs' taught'/tmp ', ללא הרשאות חדשות.
סודות: לא בתמונות; הר מן מנהל סודות K8s/vault/docker.

5. 2 שרשרת אספקה

SBOM (CyclonDX/SPDX) וסריקה (Trivy/Grype).
חתימה (coseign, sigstore) ומדיניות משיכה (valuation).
חזרות לעדכונים: תמונות בסיס עם טלאי CVE נבנות מחדש באופן קבוע.

6) אחסון ונהגי קבצים

ברירת המחדל היא overlay2 (מהיר ויציב). בסביבה נטולת חלוקים, לעתים קרובות פיוז-על.
כרכים עבור נתונים ומטמונים, כרוך-הר לפיתוח.
אל תכתוב אל ”/” - השתמש בנתיב המידע (”/data ”), הפרד מצב מהתמונה.

7) רשת ו ־ DNS

רשתות Docker: bridge (ברירת מחדל), host (תקורה מינימלית, קונפליקטי יציאה), none, macvlan/ipvlan (אינטגרציה L2/L3).
Docker DNS resolver לוקח/daemon מהמארח. ג 'סון; עבור Perd, הגדרת מטמון רסיבר המקומי.
בשנת K8s, הרשת מנוהלת על ידי CNI (Calico/Cilium/Flannel). עבור סירה/רשת - יירוטים (iptables).

8) משאבים ו ־ QOS (cgroups v2)

הגבלות: '- cpus', '- memory', '- pids-limit', '- cpuset-cpus'.
הגדרת בקשות/הגבלות (in 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"} }

Metrics: Docker Engine API, CASTOR, צומת יצוא; להתחקות דרך סוכן במכולה או סירה.

10) רישומים ואימות

רשמים פרטיים: ECR/GCR/ACR/Harbor/GitHub Container Registry.
דרגה-גבולות Docker Hub; השתמש במראות/מטמונים (רישום-מטמון).
מדיניות שימור/תגיות בלתי ניתנות לשינוי, שכפול בין אזורים.
התחברות דוקר אינה מאוחסנת בתסריטים; השתמש בסודות מודיע ופדרציית OIDC.

11) docker-compose vs

Compose - עמידות פיתוח/אינטגרציה מקומית.
Kubernetes (פריסה/StateStateStySet/DaemonSet, Ingress, Secrets, 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) צ 'ק בריא, התחלה/עצירה, כיבוי חינני

השתמש ”צ 'ק בריא” עם פסקי זמן והגבלות ”חוזר”.
נכון חינני: לתפוס SIGTERM, לסיים נכנסים, קשרים קרובים, ואז לצאת.
K8s: "Prestop 'הוק +" סיום Seconding Seconds ", מוכנות liberness.

13) השיטות הטובות ביותר בשפה/מחסנית (סיכום)

Node: 'npm ci', 'NODE _ ENV = ייצור', בטל Dev-Deps בזמן ריצה, '- hapsnapshot' off, 'UWS/GZip' מאחורי פרוקסי L7.
פייתון: גלגלים, 'gunicorn' - gunicorn - חינני-timeout',' GTHREADs'/' UVICORn' על ידי CPU, אין צורך לאחסן VV בתוך שכבה משותפת.
Go: CGO Off (במידת האפשר),' -ldflags =” --W ”, עקום/סטטי, 'GOMAXPROCS 'על ידי cgroups.
JAVA: שכבות JAR, ”XX: MaxRAMPERCANTAGE”, CDS/Layered JAR למטמון.

14) שרשרת אספקה ופוליטיקה תדמיתית

צור SBOM במודיע, שמור ליד החפץ.
סרוק תמונות על כל כלב; שער ל-CVES קריטי.
סימן תמונות (coseign), אפשר בקר מדיניות (in K8s - Kyverno/Confest/Gatekeeper).
בניה והפעלה נפרדת של חשבונות/רשתות; תלויות מטמון ברישום הפרטי.

15) אנטי דפוסים

”: האחרון” בדוקטורט; מחסור בתגים בלתי ניתנים לשינוי.
הרכבה ”בתוך מארח הייצור” ללא בידוד; לאחסן סודות בדוקרפיל.
פועל כמו שורש, '- - מוכשר', יכולות רחבות.
תמונות עבות (> 1-2 GB), אף אחד. dockerignore.
הלוגיקה ב-ANTRYPOINT דרך המעטפת נוצרת בעקבות בעיות אותות.
כתוב מידע מתמשך לשכבת המיכל במקום לנפח.
צ 'ק בריא, מה שהופך בקשות יקרות לדרבן-DB.

16) רשימת מימושים (0-45 ימים)

0-10 ימים

Standardize Dockerfile (רב-שלבים, dockerignore, LABEL, rocked base).
כלל Kit/buildx mache עבור מנהלי החבילות.
עבור לפרופילי ברירת המחדל של Seccomp/Apparmor/SELinux.

11-25 ימים

מזעור תמונות זמן הרצה (alpine/distrobless), הצבת דברים לפי סדר עם יומנים (rotation).
הגדרת גבולות משאבים, צ 'קים בריאים, תיקון PID 1/Tini.
העלה את הרישום/המטמון הפרטי, חבר את סורק ה ־ CVE ודור ה ־ SBOM.

26-45 ימים

הזן חתימת תמונה ומדיניות אשכול כניסה.
ארגן רב-קשתות (amd64/arm64) עבור השירותים הנדרשים.
מסמך לבנות/לשחרר ספר ריצות, לבנות גודל/פגיעות/דו "ח זמן.

17) מדדי בגרות

תגים בלתי ניתנים לשיפור ואסיפות עבור 95% מהשירותים.
גודל תמונת זמן הריצה הממוצע הוא <200-300 MB (נערם).
100% מכלי הדרבן הם לא שורשיים, עם יכולות מוגבלות וקריאת FS בלבד.
סריקת SBOM ו ־ CVE לדחיפה; CVEs קריטיים נחסמים פי.
חתימת תמונות ואכיפת מדיניות בסביבה.
קור מכולה התחל זמן סימון היעד SLO (לדוגמה: 2-5 שניות), נכבה חיננית נכונה.

18) מסקנה

בלימת מבוגרים היא תקני OCI + לבנות משמעת + ביטחון ברירת מחדל + יכולת תצפית ומדיניות משלוח. השתמש ב ־ Streeful and Streeful Kit, צמצם תמונות בזמן ריצה, הפעל לא ־ שורש תחת פרופילים קפדניים, תיקן תגיות, סרק וסימן, שמור על רישומים/משאבים/רשת תחת שליטה. אז מכולות יהפכו ליסוד הצפוי והניתן לניהול של הפלטפורמה שלכם, מפיתוח לייצור.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.