Effiziente Ausführung von Docker-Images
Optimierung der Docker-Image-Größe
Ein wichtiger Faktor für die effiziente Ausführung von Docker-Images ist die Minimierung der Imagegröße. Kleinere Images führen zu schnelleren Downloads, schnelleren Container-Startzeiten und reduziertem Speicherbedarf. Sie können die Imagegröße optimieren durch:
- Verwendung eines kleineren Basis-Images (z. B.
alpine
statt ubuntu
)
- Minimierung der Anzahl der Schichten in der Dockerfile
- Entfernen unnötiger Dateien und Pakete aus dem Image
## Beispiel-Dockerfile für eine kleinere Imagegröße
FROM alpine:3.14
COPY app.py /app/
RUN apk add --no-cache python3 \
&& pip3 install --no-cache-dir flask \
&& rm -rf /var/cache/apk/*
CMD ["python3", "/app/app.py"]
Caching von Docker-Image-Schichten
Docker verwendet einen Caching-Mechanismus, um den Build-Prozess zu beschleunigen. Wenn Sie ein Docker-Image erstellen, prüft Docker, ob sich Schichten in der Dockerfile seit dem letzten Build geändert haben. Wenn eine Schicht sich nicht geändert hat, kann Docker die zwischengespeicherte Version dieser Schicht verwenden, was die Buildzeit erheblich reduzieren kann.
graph LR
A[Basis-Image] --> B[Schicht 1]
B --> C[Schicht 2]
C --> D[Schicht 3]
D --> E[Schicht 4]
E --> F[Schicht 5]
Multi-Stage-Builds
Multi-Stage-Builds ermöglichen es Ihnen, mehrere FROM
-Anweisungen in einer einzigen Dockerfile zu verwenden, jede mit einem anderen Basis-Image. Dies kann hilfreich sein, um die endgültige Imagegröße zu reduzieren, indem die Build- und Laufzeitumgebungen getrennt werden.
## Beispiel-Dockerfile mit Multi-Stage-Build
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o app .
FROM alpine:3.14
COPY --from=builder /app/app /app/
CMD ["/app/app"]
Caching von Docker-Volumes
Docker-Volumes können verwendet werden, um Daten außerhalb des Dateisystems des Containers zu speichern. Durch das Caching von Docker-Volumes können Sie die Leistung Ihrer Container verbessern, indem Sie die Zeit reduzieren, die zum Laden von Daten aus dem Volume benötigt wird.
## Erstellen eines persistenten Volumes
docker volume create my-volume
## Ausführen eines Containers mit dem persistenten Volume
docker run -v my-volume:/data labex/web-app