So nutzen Sie Docker Cache zur Optimierung der Build-Geschwindigkeit
Bild vom Herausgeber | Midjourney & Canva

Durch die Nutzung des Docker-Cache können Sie Ihre Builds erheblich beschleunigen, indem Sie Ebenen aus früheren Builds wiederverwenden. Erfahren Sie, wie Sie ein Docker-File optimieren, um den Layer-Caching-Mechanismus von Docker optimum zu nutzen.

Voraussetzungen

Bevor du anfängst:

  • Sie sollten Docker installiert haben. Docker herunterladen falls Sie das nicht bereits getan haben.
  • Sie sollten mit den grundlegenden Docker-Konzepten, der Erstellung von Docker-Dateien und gängigen Docker-Befehlen vertraut sein.

So funktioniert der Docker Construct Cache

Docker-Photos werden in Schichten aufgebaut, wobei jede Anweisung im Dockerfile eine neue Schicht erstellt. Anweisungen wie FROM, RUN, COPYUnd ADD jeweils eine neue Ebene im resultierenden Bild erstellen.

Docker verwendet einen inhaltsadressierbaren Speichermechanismus zur Verwaltung von Picture-Ebenen. Jede Ebene ist identifiziert durch einen einzigartigen Hash die Docker basierend auf dem Inhalt der Ebene berechnet. Docker vergleicht diese Hashes, um festzustellen, ob es eine Ebene aus dem Cache wiederverwenden kann.

Build-Cache-1Build-Cache-1
Erstellen eines Docker-Photos | Bild vom Autor

Wenn Docker ein Picture erstellt, geht es jede Anweisung in der Docker-Datei durch und führt eine Cache-Suche durch, um zu sehen, ob es eine zuvor erstellte Ebene wiederverwenden kann.

Build-Cache-2Build-Cache-2
Zum Wiederverwenden oder Neuaufbau | Bild vom Autor

Die Entscheidung zur Nutzung des Caches hängt von mehreren Faktoren ab:

  • Basisbild: Wenn das Basisbild (FROM Anweisung) geändert wurde, macht Docker den Cache für alle nachfolgenden Ebenen ungültig.
  • Anweisungen: Docker überprüft den genauen Inhalt jeder Anweisung. Wenn die Anweisung mit einer zuvor ausgeführten Anweisung identisch ist, kann der Cache verwendet werden.
  • Dateien und Verzeichnisse: Für Anweisungen, die Dateien beinhalten, wie COPY Und ADDDocker prüft den Inhalt der Dateien. Wenn sich die Dateien nicht geändert haben, kann der Cache verwendet werden.
  • Kontext erstellen: Docker berücksichtigt bei der Entscheidung, den Cache zu verwenden, auch den Construct-Kontext (die an den Docker-Daemon gesendeten Dateien und Verzeichnisse).

Cache-Invalidierung verstehen

Bestimmte Änderungen können den Cache ungültig machen, was dazu führen kann, dass Docker die Ebene von Grund auf neu erstellt:

  • Änderung im Dockerfile: Wenn sich eine Anweisung im Docker-File ändert, macht Docker den Cache für diese Anweisung und alle nachfolgenden Anweisungen ungültig.
  • Änderungen in Quelldateien: Wenn sich Dateien oder Verzeichnisse ändern, die in `COPY` oder `ADD` Anweisungen enthalten sind, Docker macht den Cache für diese und nachfolgende Ebenen ungültig.

Zusammenfassend müssen Sie Folgendes über den Docker-Construct-Cache wissen:

  • Docker erstellt Photos Schicht für Schicht. Wenn sich eine Schicht nicht geändert hat, kann Docker die zwischengespeicherte Model dieser Schicht wiederverwenden.
  • Wenn sich eine Ebene ändert, werden alle nachfolgenden Ebenen neu erstellt. Daher kann es helfen, Cache-Treffer zu maximieren, wenn Anweisungen, die sich nicht oft ändern (wie das Foundation-Picture, Abhängigkeitsinstallationen, Initialisierungsskripte), viel früher in die Docker-Datei eingefügt werden.

Greatest Practices zur Nutzung des Construct-Cache von Docker

Um den Docker-Construct-Cache zu nutzen, können Sie Ihr Dockerfile so strukturieren, dass die Cache-Treffer maximiert werden. Hier sind einige Tipps:

  • Anweisungen nach Änderungshäufigkeit sortieren: Platzieren Sie Anweisungen, die sich weniger häufig ändern, weiter oben im Dockerfile. Und platzieren Sie häufig geänderte Anweisungen, wie z. B. COPY oder ADD des Anwendungscodes gegen Ende der Docker-Datei.
  • Trennen Sie Abhängigkeiten vom Anwendungscode: Trennen Sie Anweisungen, die Abhängigkeiten installieren, von denen, die den Quellcode kopieren. Auf diese Weise werden Abhängigkeiten nur dann neu installiert, wenn sie sich ändern.

Sehen wir uns als Nächstes einige Beispiele an.

Beispiele: Dockerfiles, die den Construct-Cache nutzen

1. Hier ist ein Beispiel-Dockerfile zum Einrichten einer PostgreSQL-Instanz mit einigen anfänglichen Setup-Skripten. Das Beispiel konzentriert sich auf die Optimierung des Layer-Caching:

# Use the official PostgreSQL picture as a base
FROM postgres:newest

# Atmosphere variables for PostgreSQL
ENV POSTGRES_DB=mydatabase
ENV POSTGRES_USER=myuser
ENV POSTGRES_PASSWORD=mypassword

# Set the working listing
WORKDIR /docker-entrypoint-initdb.d

# Copy the initialization SQL scripts
COPY init.sql /docker-entrypoint-initdb.d/

# Expose PostgreSQL port
EXPOSE 5432

Die Basisbildebene ändert sich häufig nicht. Umgebungsvariablen ändern sich wahrscheinlich nicht oft. Wenn Sie sie additionally frühzeitig festlegen, können Sie den Cache für nachfolgende Ebenen wiederverwenden. Beachten Sie, dass wir die Initialisierungsskripte vor dem Anwendungscode kopieren. Dies liegt daran, dass das Kopieren von Dateien, die sich nicht häufig ändern, vor denen, die sich häufig ändern, dabei hilft, den Cache zu nutzen.

2. Hier ist ein weiteres Beispiel für eine Docker-Datei zum Containerisieren einer Python-App:

# Use the official light-weight Python 3.11-slim picture
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 contents of the present listing into the container
COPY . .

# Expose the port on which the app runs
EXPOSE 5000

# Run the appliance
CMD ("python3", "app.py")

Durch das Kopieren des restlichen Anwendungscodes nach der Set up der Abhängigkeiten wird sichergestellt, dass Änderungen am Anwendungscode den Cache für die Abhängigkeitsebene nicht ungültig machen. Dadurch wird die Wiederverwendung zwischengespeicherter Ebenen maximiert, was zu schnelleren Builds führt.

Indem Sie den Caching-Mechanismus von Docker verstehen und nutzen, können Sie Ihre Docker-Dateien für schnellere Builds und eine effizientere Picture-Erstellung strukturieren.

Zusätzliche Ressourcen

Weitere Informationen zum Caching finden Sie unter den folgenden Hyperlinks:

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.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert