GH GambleHub

Εμπορευματοκιβώτιο: Docker και OCI

Εμπορευματοκιβώτιο: Docker και OCI

1) Βασικές έννοιες και πρότυπα OCI

OCI Image Spec - μορφή εικόνας (δηλωτικό, ρυθμιστικό, στρώματα, δείκτης για πολυ-αψίδα).
OCI Runtime Spec - πώς να τρέξει ένα δοχείο (δέσμη, 'config. json '), εφαρμογή: runc καθώς και gVisor, Kata Containers.
OCI Distribution Spec - αλληλεπίδραση με τα μητρώα (ώθηση/έλξη, εξουσιοδότηση).

Docker = UX και το οικοσύστημα γύρω από OCI: Dockerfile/BuildKit/CLI/Compose/Hub. Στο Kubernetes, το Docker Engine αντικαθίσταται από το containerd/CRI-O, αλλά η μορφή της εικόνας είναι η ίδια.

2) Εμφανίσεις: στρώματα, ετικέτες, μεταδεδομένα

= (layered filesystem) + config (entrypoint/cmd/env/labels) + δηλωτικό.
Ετικέτες: μη χρησιμοποιήσετε ': τελευταία' σε prod? Καρφίτσα ': 1. 21. 3 ', git-SHA ή ημερομηνία + SHA.
ΕΤΙΚΕΤΑ: ιδιοκτήτης, επαφή, vcs-url, org. opencontainers. (τίτλος, περιγραφή, αναθεώρηση, πηγή).
Πολλαπλή αψίδα: Το δηλωτικό ευρετηρίου δίνει τη σωστή επιλογή για το 'amd64/arm64'.

3) Κατασκευή: Dockerfile, BuildKit, πολλαπλών σταδίων

3. 1 Αρχές

Ελαχιστοποίηση στρωμάτων, διόρθωση εκδόσεων, καθαρές κρύπτες διαχείρισης πακέτων.
Πρώτα αντιγράψτε το δηλωτικό/κλείδωμα αρχείων, στη συνέχεια 'RUN εγκατάσταση deps' - βελτιώνει την κρύπτη.
απαιτείται .dockerignore (εξαιρούνται «.git», τεχνουργήματα, μυστικά).
Προτιμώνται παραδείγματα απερίσκεπτων/αλπικών/ελάχιστων βάσεων.

3. build2 τσιπ kit

Παράλληλες κατασκευές, μυστικά στη συναρμολόγηση ('--secret'), στηρίγματα κρύπτης, buildx για πολυ-αψίδα.

Παράδειγμα τοποθέτησης κρύπτης:
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"]
Πύθωνας (кеш τροχού, μη ρίζας):
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/Άνοιξη με στρώματα):
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 και tini/init init:
dockerfile
ENTRYPOINT ["tini","--","/app"]

"HEALTHCHECK 'είναι εύλογο (συχνότητα/χρονοδιάγραμμα, χωρίς περιττό φορτίο).

5) Ασφάλεια εμπορευματοκιβωτίων

5. 1 Πολιτικές και σκλήρυνση

Μη ριζική (USER), χωρίς ρίζα Docker/περιέκτες.
Ικανότητες: αφαιρέστε το περιττό ('- cap-drop = ALL - cap-add = NET _ BIND _ SERVICE, κ.λπ.).
seccomp/AppArmor/SELinux: Ενεργοποίηση προκαθορισμένων ή αυστηρών προφίλ.
Μόνο ανάγνωση FS + 'tmpf '/tmp', χωρίς νέα προνόμια.
Μυστικά: όχι σε εικόνες. τοποθετείται από τον διαχειριστή μυστικών K8s/vault/docker.

5. 2 Αλυσίδα εφοδιασμού

SBOM (CycloneDX/SPDX) και σάρωση (Trivy/Grype).
Υπογραφή (συνημμένο, sigstore) και πολιτική έλξης (επαλήθευση).
Πρόβες για ενημερώσεις: Οι βασικές εικόνες με έμπλαστρα CVE ξαναχτίζονται τακτικά.

6) Οδηγοί αποθήκευσης και αρχείων

Προκαθορισμένη είναι η επικάλυψη 2 (γρήγορη και σταθερή). Σε περιβάλλοντα χωρίς ρίζες, συχνά υφίστανται επικαλύψεις.
όγκοι για δεδομένα και κρύπτες, δεσμευμένοι για ανάπτυξη.
Μη εγγραφείτε στο '/' - χρησιμοποιήστε τη διαδρομή δεδομένων ('/δεδομένα '), ξεχωριστή κατάσταση από την εικόνα.

7) Δίκτυο και DNS

Δίκτυα Docker: γέφυρα (εξ ορισμού), ξενιστής (ελάχιστα εναέρια, συγκρούσεις λιμένων), κανένα, macvlan/ipvlan (ενσωμάτωση L2/L3).
Ο Docker DNS αναλαμβάνει/δαίμονας από τον ξενιστή. json; για prod, ρυθμίστε την τοπική μνήμη του διαλύτη.
Το K8s, η CNI διαχειρίζεται το δίκτυο (Calico/Cilium/Flannel). Για sidecar/mesh - υποκλοπές (iptables).

8) Πόροι και QoS (cgroups v2)

Περιορισμοί: '-cpus', '--memory', '--pids-limit', '-cpuset-cpus'.
Ορισμός αιτήσεων/ορίων (σε K8s) → επηρεάζει τον προγραμματισμό και το QoS.
Παρακολούθηση OOMKilled, throttling, ακίδες καθυστέρησης λόγω 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', 'awslog ,' syslog '.

Ρύθμιση περιστροφής:
json
{ "log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"5"} }

Μετρήσεις: Docker Engine API, cAdvisor, εξαγωγείς κόμβων. ιχνηλάτηση μέσω παράγοντα σε περιέκτη ή πλευρικό κάνιστρο.

10) Μητρώα και εξακρίβωση της γνησιότητας

Ιδιωτικά μητρώα: ECR/GCR/ACR/Harbor/GitHub Μητρώο εμπορευματοκιβωτίων.
Όρια τιμών Docker Hub· χρήση κατόπτρων/κρυψώνων (μνήμη μητρώου).
Πολιτική διατήρησης/αμετάβλητης ετικέτας, αναπαραγωγή μεταξύ περιφερειών.
«docker login» δεν αποθηκεύεται σε σενάρια· χρησιμοποιούν μυστικά CI και ομοσπονδία OIDC.

11) docker-compose vs orchestrators

Σύνθεση - περίπτερα τοπικής ανάπτυξης/ολοκλήρωσης.
Kubernetes (εγκατάσταση/stat Прод Set/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) Έλεγχος υγείας, εκκίνηση/στάση, χαριτωμένο κλείσιμο

Χρησιμοποιήστε το 'HEALTHCHECK' με περιορισμούς χρονοδιαγραμμάτων και επαναλήψεων.
Διορθώστε το χαριτωμένο: πιάστε το SIGTERM, τερματίστε τις εισερχόμενες, τις στενές συνδέσεις και μετά την έξοδο.
: 'preStop' hook + 'termingGraceResiderSeconds', ετοιμότητα ζωντάνια.

13) Βέλτιστες πρακτικές ανά γλώσσα/στοίβα (περίληψη)

Κόμβος: 'npm ci', 'NODE _ ENV = παραγωγή', απενεργοποίηση dev-deps σε χρόνο λειτουργίας, '--heapsnapshot' off, 'uWS/GZip' πίσω από τον διαμεσολαβητή L7.
Python: τροχοί, 'gunicorn --graceful-timeout', 'GTHREADS '/' UVICorn' από την CPU, δεν αποθηκεύουν άσκοπα το venv μέσα σε ένα κοινό στρώμα.
GO off (αν είναι δυνατόν),' -ldslags =» -s -w «', distrowless/static, 'GOMAXPROCS' by cgroups.
Java: layered JAR, '-XX: MaxRAMPercentage', CDS/Layered JAR for cache.

14) Αλυσίδα εφοδιασμού και πολιτική εικόνας

Δημιουργία SBOM σε CI, αποθήκευση δίπλα στο τεχνούργημα.
Σάρωση εικόνων σε κάθε σκυλάκι. πύλη σε κρίσιμα ΚΒΕ.
Σημειώστε εικόνες (συνημμένο), ενεργοποιήστε τον ελεγκτή πολιτικής (σε K8s - Kyverno/Conftest/Gatekeeper).
Χωριστοί λογαριασμοί/δίκτυα κατασκευής και λειτουργίας. Εξαρτήσεις κρύπτης στο ιδιωτικό μητρώο.

15) Αντι-μοτίβα

': τελευταία' in prod· έλλειψη αμετάβλητων ετικετών.
συναρμολόγηση «εντός του παραγωγού» χωρίς απομόνωση· αποθήκευση μυστικών στο Dockerfile.
Τρέξιμο ως ρίζες, «- προνομιούχες», ευρείες δυνατότητες.
Παχιές εικόνες (> 1-2 GB), καμία. dockerignore.
Η λογική init στο ENTRYPOINT μέσω του κελύφους → προβλήματα σήματος.
Γράψτε μόνιμα δεδομένα στο στρώμα του περιέκτη αντί του όγκου.
Healthcheck, η οποία υποβάλλει ακριβά αιτήματα στην prod-DB.

16) Κατάλογος ελέγχου εφαρμογής (0-45 ημέρες)

0- 10 ηµέρες

Τυποποίηση Dockerfile (πολλαπλών σταδίων, .dockerignore, LABEL, καρφιτσωμένη βάση).
Συμπεριλάβετε BuildKit/buildx, cache mounts για διαχειριστές πακέτων.
Μετάβαση σε προεπιλεγμένα προφίλ μη-ρίζας και 'seccomp '/AppArmor/SELinux.

11-25 ημέρες

Ελαχιστοποίηση εικόνων χρόνου εκτέλεσης (alpine/distroless), τοποθέτηση πραγμάτων σε τάξη με κορμούς (περιστροφή).
Δημιουργία ορίων πόρων, υγειονομικοί έλεγχοι, διόρθωση PID 1/tini.
Υψώστε το ιδιωτικό μητρώο/κρύπτη, συνδέστε τον ανιχνευτή CVE και την παραγωγή SBOM.

26-45 ημέρες

Εισάγετε την υπογραφή εικόνας και την πολιτική εισδοχής συμπλεγμάτων.
Οργανώστε πολυ-αψίδα (amd64/arm64) για τις απαιτούμενες υπηρεσίες.
Εγχειρίδιο κατασκευής/απελευθέρωσης εγγράφων, μέγεθος κατασκευής/τρωτότητα/χρονική αναφορά.

17) Μετρήσεις διάρκειας

Αμετάβλητες ετικέτες και αναπαραγώγιμα συγκροτήματα για ≥ το 95% των υπηρεσιών.
Το μέσο μέγεθος της εικόνας του χρόνου εκτέλεσης είναι <200-300 MB (στοιβαγμένο).
Το 100% των εμπορευματοκιβωτίων είναι μη ριζωμένα, με περιορισμένες δυνατότητες και μόνο ανάγνωσης FS.
σάρωση SBOM και CVE ανά ώθηση· Τα κρίσιμα CVE → μπλοκάρονται.
Υπογραφή εικόνας και εφαρμογή πολιτικής σε περιβάλλοντα.
Χρόνος ψυχρής εκκίνησης εμπορευματοκιβωτίων - στόχος SLO (π.χ. 2-5 δευτερόλεπτα), σωστό χαριτωμένο κλείσιμο.

18) Συμπέρασμα

Η εμπορευματοκιβώτια ενηλίκων είναι πρότυπα OCI + πειθαρχία κατασκευής + προκαθορισμένη ασφάλεια + παρατηρησιμότητα και πολιτική παράδοσης. Χρήση πολλαπλών σταδίων και BuildingKit, ελαχιστοποίηση εικόνων χρόνου λειτουργίας, εκτέλεση μη-ρίζας κάτω από αυστηρά προφίλ, διόρθωση ετικετών, σάρωση και υπογραφή, διατήρηση αρχείων καταγραφής/πόρων/δικτύου υπό έλεγχο. Έτσι τα εμπορευματοκιβώτια θα γίνουν το προβλέψιμο και διαχειρίσιμο θεμέλιο της πλατφόρμας σας - από την ανάπτυξη μέχρι την παραγωγή.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Telegram
@Gamble_GC
Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.