Heim >Betrieb und Instandhaltung >Docker >Wie verwende ich mehrstufige Builds in Docker, um kleinere, sichere Bilder zu erstellen?
Mehrstufige Builds in Docker sind eine Funktion, mit der Sie mehrere FROM
Anweisungen in Ihrem Dockerfile verwenden können. Jede FROM
Aussage kann eine neue Phase des Build -Prozesses starten, und Sie können Artefakte von einer Stufe in eine andere kopieren. Diese Methode ist besonders nützlich, um kleinere, sichere Docker -Bilder zu erstellen, indem die Build -Umgebung von der Laufzeitumgebung getrennt wird.
So können Sie mehrstufige Builds verwenden, um dies zu erreichen:
Definieren Sie die Build -Phase : Definieren Sie zunächst eine Build -Phase, in der Sie Ihre Anwendung zusammenstellen oder Ihre Artefakte vorbereiten. Zum Beispiel können Sie ein golang
-Bild verwenden, um eine Go -Anwendung zu kompilieren.
<code class="Dockerfile">FROM golang:1.16 as builder WORKDIR /app COPY . . RUN go build -o myapp</code>
Definieren Sie die Laufzeitphase : Definieren Sie nach der Bauphase eine Laufzeitphase mit einem minimalen Basisbild. Kopieren Sie nur die erforderlichen Artefakte von der Build -Bühne in diese Laufzeitphase.
<code class="Dockerfile">FROM alpine:3.14 COPY --from=builder /app/myapp /myapp CMD ["/myapp"]</code>
Durch die Verwendung von mehrstufigen Builds haben Sie ein endgültiges Bild, das nur das enthält, was für die Ausführung Ihrer Anwendung erforderlich ist. Dies ist im Vergleich zu dem zum Aufbau verwendeten Bild weniger kleiner und hat weniger potenzielle Schwachstellen.
Die effektive Organisation von Code in einem mehrstufigen Docker-Build kann die Effizienz und Klarheit Ihrer Dockerfile erheblich verbessern. Hier sind einige Best Practices:
Getrennte Bedenken : Verwenden Sie verschiedene Stufen für verschiedene Zwecke (z. B. Erstellen, Testen und Bereitstellen). Diese Trennung von Bedenken erleichtert das Verständnis und die Aufrechterhaltung Ihrer Dockerfile.
<code class="Dockerfile"># Build stage FROM node:14 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # Test stage FROM node:14 as tester WORKDIR /app COPY --from=builder /app . RUN npm run test # Runtime stage FROM node:14-alpine WORKDIR /app COPY --from=builder /app/build /app/build CMD ["node", "app/build/index.js"]</code>
Minimieren Sie die Anzahl der Ebenen : Kombinieren Sie die Befehle, die Sie nach Möglichkeit kombinieren, um die Anzahl der Ebenen in Ihrem Bild zu reduzieren. Diese Praxis beschleunigt nicht nur den Build -Prozess, sondern macht das resultierende Bild auch kleiner.
<code class="Dockerfile">RUN apt-get update && \ apt-get install -y some-package && \ rm -rf /var/lib/apt/lists/*</code>
.dockerignore
: Erstellen Sie eine .dockerignore
-Datei, um unnötige Dateien von dem Kopieren in den Kontext des Docker -Builds auszuschließen. Dies beschleunigt den Build -Prozess und verringert die Bildgröße.package.json
zuerst kopieren, npm install
ausführen und dann den Rest der Anwendung kopieren.Die Optimierung des Caching in mehrstufigen Docker-Builds kann die Bauzeiten erheblich reduzieren. Hier sind mehrere Strategien, um dies zu erreichen:
Reihenfolge der Operationen : Stellen Sie häufig die Befehle gegen Ende Ihrer Dockerfile an. Docker wird die Schichten vom Beginn der Dockerfile zwischenstrichen und nachfolgende Builds beschleunigen.
<code class="Dockerfile">FROM node:14 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build</code>
In diesem Beispiel ändert sich npm install
weniger wahrscheinlich als der Anwendungscode, sodass sie vor der COPY . .
Befehl.
Hebel BuildKit : Docker Buildkit bietet verbesserte Bau -Caching -Mechanismen an. Aktivieren Sie BuildKit, indem Sie die Umgebungsvariable DOCKER_BUILDKIT=1
festlegen und den Befehl neuer RUN --mount
verwenden, um Cache -Verzeichnisse zu montieren.
<code class="Dockerfile"># syntax=docker/dockerfile:experimental FROM golang:1.16 as builder RUN --mount=type=cache,target=/root/.cache/go-build \ go build -o myapp</code>
.dockerignore
-Datei, um unnötige Dateien aus dem Build -Kontext auszuschließen. Ein kleinerer Kontext bedeutet weniger Daten zum Übertragen und einen schnelleren Build.Mehrstufige Docker-Builds bieten im Vergleich zu einstufigen Builds mehrere Sicherheitsvorteile:
Durch die Nutzung von mehrstufigen Builds können Sie die Sicherheitspflicht Ihrer Docker-Bilder erheblich verbessern und gleichzeitig ihre Größe und Leistung optimieren.
Das obige ist der detaillierte Inhalt vonWie verwende ich mehrstufige Builds in Docker, um kleinere, sichere Bilder zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!