Bild vom Herausgeber | Midjourney & Canva
Sie können Dockerfiles für schnellere Construct-Zeiten optimieren, indem Sie den Construct-Cache nutzen, den Construct-Kontext reduzieren und mehr. In diesem Tutorial werden die Greatest Practices erläutert, die Sie beim Erstellen von Dockerfiles befolgen sollten.
Voraussetzungen
Sie sollten Docker installiert haben. Docker herunterladen für Ihr Betriebssystem, falls Sie dies nicht bereits getan haben.
1. Verwenden Sie ein kleineres Basisbild
Zunächst können Sie mit einem kleineren Basisimage beginnen, um minimale Photos zu erstellen. Dies reduziert die Gesamtgröße des Docker-Photos und beschleunigt den Construct-Prozess.
Wenn Sie beispielsweise Python-Apps in Containern speichern, können Sie mit einem python:3.x-slim
Bild, eine kleinere Model von python:3.x
enthält nur die wesentlichen Komponenten, die zum Ausführen von Python erforderlich sind, anstelle der Normal python:3.x
.
Lesen So erstellen Sie minimale Docker-Photos für Python-Anwendungen um mehr zu lernen.
2. Nutzen Sie den Docker Construct Cache
Die Reihenfolge der Anweisungen in einer Docker-Datei beeinflusst die Construct-Zeiten, da Docker seinen Construct-Cache nutzt.
Docker erstellt Photos, indem es Anweisungen im Dockerfile sequenziell ausführt – und für jede Anweisung eine neue Picture-Ebene erstellt. Wenn sich eine Ebene seit dem letzten Construct nicht geändert hat, kann Docker die zwischengespeicherte Ebene wiederverwenden und so den Construct-Prozess beschleunigen.
Deshalb ist es wichtig, Optimieren Sie die Reihenfolge der Anweisungen, um Cache-Treffer zu maximieren:
- Platzieren Sie häufig wechselnde Anweisungen ans Ende: Platzieren Sie Anweisungen, die sich häufig ändern, wie z. B. das Kopieren des Anwendungscodes, am Ende der Docker-Datei. Dadurch verringert sich die Wahrscheinlichkeit, dass der Cache für den gesamten Construct ungültig wird.
- Platzieren Sie weniger häufig wechselnde Anweisungen frühzeitig: Anweisungen wie das Installieren von Betriebssystempaketen, das Festlegen von Umgebungsvariablen und das Installieren von Abhängigkeiten (wenn sich Abhängigkeiten nicht oft ändern) sollten frühzeitig platziert werden, um die Cache-Treffer zu maximieren.
Nehmen wir ein Beispiel-Dockerfile:
# Suboptimal ordering
FROM python:3.11-slim
# Set the working listing
WORKDIR /app
# Copy your complete software code
COPY . .
# Set up the required Python packages
RUN pip set up --no-cache-dir -r necessities.txt
# Expose the port on which the app runs
EXPOSE 5000
# Run the applying
CMD ("python3", "app.py")
In dieser anfänglichen Docker-Datei macht jede Änderung im Anwendungscode den Cache für den gesamten Construct-Prozess ungültig, einschließlich der Set up von Abhängigkeiten.
Hier ist die optimierte Model:
# Higher ordering of directions
FROM python:3.11-slim
# Set the working listing
WORKDIR /app
# Set up dependencies
COPY necessities.txt necessities.txt
RUN pip set up --no-cache-dir -r necessities.txt
# Copy the present listing contents into the container at /app
COPY . .
# Expose the port on which the app runs
EXPOSE 5000
# Run the applying
CMD ("python3", "app.py")
Wenn sich in diesem optimierten Dockerfile der Anwendungscode ändert, kann Docker weiterhin die zwischengespeicherten Ebenen zum Installieren von Abhängigkeiten verwenden. Auf diese Weise lösen Änderungen am Anwendungscode nicht unnötig eine Neuinstallation von Abhängigkeiten aus.
3. Verwenden Sie mehrstufige Builds
Mehrstufige Builds ermöglichen Ihnen, die Construct-Umgebung von der endgültigen Laufzeitumgebung zu trennen. Dadurch kann die Größe des endgültigen Photos reduziert werden, da nur die erforderlichen Laufzeitabhängigkeiten einbezogen werden.
Betrachten Sie die folgende Dokcer-Datei mit mehrstufigem Construct:
# Construct stage
FROM python:3.11 AS builder
RUN apt-get replace && apt-get set up -y build-essential
COPY necessities.txt .
RUN pip set up --no-cache-dir -r necessities.txt
# Last stage
FROM python:3.11-slim
COPY --from=builder /usr/native/lib/python3.11/site-packages /usr/native/lib/python3.11/site-packages
COPY --from=builder /usr/native/bin /usr/native/bin
COPY . /app
WORKDIR /app
CMD ("python3", "app.py")
In diesem Beispiel werden die Construct-Abhängigkeiten installiert im builder
Part, und nur die erforderlichen Laufzeitabhängigkeiten werden in das endgültige Picture kopiert.
4. Minimieren Sie den Construct-Kontext mit .dockerignore-Dateien
Stellen Sie sicher, dass Sie über .dockerignore
Datei, um zu verhindern, dass unnötige Dateien in den Docker-Kontext kopiert werden, wodurch die Construct-Zeit verkürzt wird. Ähnlich wie .gitignore
diese Datei teilt Docker mit, welche Dateien während des Construct-Prozesses ignoriert werden sollen, wodurch die Kontextgröße reduziert wird.
Im .dockerignore
Datei können Sie temporäre Dateien, virtuelle Umgebungen, IDE-Einstellungen und andere unnötige Dateien einschließen, die nicht in den Construct-Kontext aufgenommen werden sollen.
Von der Reduzierung der Foundation-Picture-Größe bis zur Optimierung des Construct-Kontexts sollten diese Optimierungen Ihnen dabei helfen, Ihre Docker-Builds effizienter zu gestalten.
Zusätzliche Ressourcen
Die folgenden Ressourcen sollten mehr erfahren:
Bala Priya C ist Entwicklerin und technische Redakteurin aus Indien. Sie arbeitet gerne an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessens- und Fachgebiete umfassen DevOps, Datenwissenschaft und natürliche Sprachverarbeitung. Sie liest, schreibt, programmiert und trinkt gerne Kaffee! Derzeit arbeitet sie daran, ihr Wissen zu lernen und mit der Entwickler-Group zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt auch ansprechende Ressourcenübersichten und Programmier-Tutorials.