Logo GH

בלימה: 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

צרו קשר

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

התחלת אינטגרציה

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

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

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