Verwendung des docker buildx prune Befehls zur Verwaltung des Build-Caches

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab untersuchen wir, wie man den Docker Build-Cache effektiv mit dem Befehl docker buildx prune verwaltet. Der Build-Cache ist ein entscheidender Mechanismus zur Beschleunigung von Docker-Image-Builds durch die Wiederverwendung zuvor erstellter Layer. Mit der Zeit kann dieser Cache jedoch anwachsen und erheblichen Speicherplatz belegen.

Wir beginnen mit dem Erstellen eines einfachen Docker-Images, um Build-Cache zu generieren. Anschließend zeigen wir verschiedene Methoden zum Bereinigen dieses Caches mit docker buildx prune. Dazu gehören das Bereinigen des gesamten Caches ohne Filter, das selektive Bereinigen unter Beibehaltung aktueller Daten mit der Option --filter, die Begrenzung der Cache-Größe mit --keep-storage und schließlich das vollständige Bereinigen des Build-Caches inklusive interner Images mit dem Flag --all. Am Ende dieses Labs werden Sie ein fundiertes Verständnis dafür haben, wie Sie Ihren Docker Build-Cache effizient verwalten können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ImageOperationsGroup -.-> docker/images("List Images") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/images -.-> lab-555061{{"Verwendung des docker buildx prune Befehls zur Verwaltung des Build-Caches"}} docker/prune -.-> lab-555061{{"Verwendung des docker buildx prune Befehls zur Verwaltung des Build-Caches"}} docker/build -.-> lab-555061{{"Verwendung des docker buildx prune Befehls zur Verwaltung des Build-Caches"}} end

Ein Image erstellen, um Build-Cache zu generieren

In diesem Schritt werden wir ein einfaches Docker-Image erstellen, um Build-Cache zu generieren. Der Docker Build-Cache ist ein Mechanismus, der den Build-Prozess beschleunigt, indem Layer aus vorherigen Builds wiederverwendet werden. Wenn Sie ein Docker-Image erstellen, erzeugt jede Anweisung im Dockerfile einen Layer. Wenn sich eine Anweisung seit dem letzten Build nicht geändert hat, kann Docker den vorhandenen Layer wiederverwenden, anstatt ihn neu zu erstellen.

Zuerst erstellen wir ein Verzeichnis für unser Projekt und wechseln hinein.

mkdir ~/project/docker-cache-demo
cd ~/project/docker-cache-demo

Nun erstellen wir ein einfaches Dockerfile. Dieses Dockerfile kopiert eine Datei in das Image und führt dann einen Befehl aus.

nano Dockerfile

Fügen Sie folgenden Inhalt zum Dockerfile hinzu:

FROM ubuntu:latest
COPY . /app
RUN echo "Hello, Docker Cache!" > /app/message.txt
CMD ["cat", "/app/message.txt"]

Speichern und schließen Sie die Datei.

Als nächstes erstellen wir eine einfache Datei, die wir in das Image kopieren werden.

nano message.txt

Fügen Sie etwas Inhalt zu message.txt hinzu:

This is a test message.

Speichern und schließen Sie die Datei.

Nun bauen wir das Docker-Image. Wir taggen das Image als cache-demo.

docker build -t cache-demo .

Sie sehen eine Ausgabe, die zeigt, wie Docker das Image Schritt für Schritt erstellt. Jeder Schritt entspricht einer Anweisung im Dockerfile. Docker lädt das ubuntu:latest-Image herunter, falls es noch nicht vorhanden ist, kopiert die message.txt-Datei und führt dann den echo-Befehl aus.

Nach Abschluss des Builds können Sie überprüfen, ob das Image erstellt wurde, indem Sie die verfügbaren Images auflisten.

docker images

Sie sollten cache-demo in der Liste der Images sehen.

Nun bauen wir das Image erneut, ohne Änderungen am Dockerfile oder message.txt vorzunehmen.

docker build -t cache-demo .

Diesmal werden Sie feststellen, dass der Build-Prozess viel schneller ist. Docker verwendet die vorhandenen Layer aus dem vorherigen Build wieder, da sich die Anweisungen im Dockerfile und der Inhalt von message.txt nicht geändert haben. Die Ausgabe zeigt für die meisten Schritte "Using cache". Dies veranschaulicht, wie der Docker Build-Cache nachfolgende Builds beschleunigt.

Build-Cache ohne Filter bereinigen

In diesem Schritt lernen wir, wie man den Docker Build-Cache ohne Filter bereinigt. Das Bereinigen des Build-Caches hilft, Speicherplatz freizugeben, indem nicht verwendete Cache-Einträge entfernt werden.

Der Befehl zum Bereinigen des Build-Caches lautet docker builder prune. Standardmäßig entfernt dieser Befehl alle Build-Cache-Einträge, die von keinem aktuell vorhandenen Image verwendet werden.

Führen wir den Befehl zum Bereinigen des Build-Caches aus:

docker builder prune

Sie werden aufgefordert, die Aktion zu bestätigen. Geben Sie y ein und drücken Sie Enter, um fortzufahren.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

Die Ausgabe zeigt Ihnen die gelöschten Build-Cache-Einträge und den insgesamt freigegebenen Speicherplatz an.

Um den Effekt der Bereinigung zu sehen, bauen wir das Image erneut:

cd ~/project/docker-cache-demo
docker build -t cache-demo .

Diesmal könnte der Build-Prozess länger dauern als beim zweiten Build im vorherigen Schritt, da ein Teil oder der gesamte Build-Cache entfernt wurde. Docker wird die bereinigten Layer neu erstellen.

Das Bereinigen ohne Filter ist nützlich, wenn Sie nicht verwendeten Build-Cache vollständig entfernen möchten, um maximalen Speicherplatz freizugeben. Allerdings kann dies die Build-Geschwindigkeit nachfolgender Builds beeinträchtigen, wenn Sie Images häufig neu erstellen. In den nächsten Schritten werden wir untersuchen, wie Filter verwendet werden können, um gezielter zu steuern, welche Build-Cache-Einträge bereinigt werden.

Build-Cache mit --Filter bereinigen und aktuelle Daten behalten

In diesem Schritt lernen wir, wie man den Docker Build-Cache mit dem --filter-Flag bereinigt, während aktuelle Daten erhalten bleiben. Dies ist nützlich, wenn Sie Speicherplatz freigeben möchten, aber dennoch von den Cache-Vorteilen für kürzliche Builds profitieren wollen.

Der Befehl docker builder prune unterstützt verschiedene Filter. Ein praktischer Filter ist until, mit dem Sie Build-Cache-Einträge entfernen können, die älter als ein bestimmter Zeitstempel sind. Der Zeitstempel kann ein Datum mit Uhrzeit oder eine relative Zeitspanne zur aktuellen Zeit sein.

Lassen Sie uns zunächst unser Image erneut bauen, um sicherzustellen, dass wir aktuellen Build-Cache haben.

cd ~/project/docker-cache-demo
docker build -t cache-demo .

Jetzt bereinigen wir den Build-Cache und behalten Einträge der letzten 5 Minuten. Wir verwenden den until-Filter mit einer Zeitspanne wie 5m.

docker builder prune --filter "until=5m"

Sie werden aufgefordert, die Aktion zu bestätigen. Geben Sie y ein und drücken Sie Enter, um fortzufahren.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

Die Ausgabe zeigt die gelöschten Build-Cache-Einträge an. Nur Einträge, die älter als 5 Minuten sind, werden entfernt.

Sie können auch einen konkreten Zeitstempel angeben. Zum Beispiel, um Cache-Einträge zu entfernen, die älter als ein bestimmtes Datum und Uhrzeit sind, verwenden Sie ein Format wie "YYYY-MM-DDTHH:MM:SS".

Die Verwendung des until-Filters mit einer Zeitspanne ist eine praktische Methode, um den aktuellsten Build-Cache zu behalten, während ältere Einträge bereinigt werden - ein guter Kompromiss zwischen Speicherplatznutzung und Build-Geschwindigkeit.

Build-Cache mit bestimmter Speichergröße mittels --keep-storage bereinigen

In diesem Schritt lernen wir, wie man den Docker Build-Cache bereinigt, während eine bestimmte Speichermenge mit dem --keep-storage-Flag erhalten bleibt. Dies ist nützlich, wenn Sie den vom Build-Cache belegten Speicherplatz begrenzen möchten.

Der Befehl docker builder prune mit dem --keep-storage-Flag ermöglicht es, die maximale Speichermenge für den Build-Cache festzulegen. Docker entfernt die ältesten Build-Cache-Einträge, bis die Gesamtgröße des verbleibenden Caches unter dem angegebenen Limit liegt.

Lassen Sie uns zunächst unser Image mehrmals bauen, um mehr Build-Cache-Einträge zu erzeugen.

cd ~/project/docker-cache-demo
docker build -t cache-demo:v1 .
docker build -t cache-demo:v2 .

Jetzt bereinigen wir den Build-Cache und behalten nur 1GB Speicherplatz. Sie können die Größe in Bytes, Kilobytes (k), Megabytes (m) oder Gigabytes (g) angeben.

docker builder prune --keep-storage 1g

Sie werden aufgefordert, die Aktion zu bestätigen. Geben Sie y ein und drücken Sie Enter, um fortzufahren.

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y

Die Ausgabe zeigt die gelöschten Build-Cache-Einträge und den insgesamt freigegebenen Speicherplatz an. Docker entfernt die ältesten Cache-Einträge, bis die Gesamtgröße des verbleibenden Caches etwa 1GB oder weniger beträgt.

Die Verwendung des --keep-storage-Flags ist eine gute Methode, um den vom Build-Cache belegten Speicherplatz zu verwalten, insbesondere in Umgebungen mit begrenztem Speicher.

Kompletten Build-Cache inklusive interner Images mit --all bereinigen

In diesem Schritt lernen wir, wie man den gesamten Docker Build-Cache inklusive interner Images mit dem --all-Flag bereinigt. Dies ist die radikalste Methode zur Cache-Bereinigung und entfernt alle Cache-Einträge unabhängig davon, ob sie von bestehenden Images verwendet werden.

Der Befehl docker builder prune mit dem --all-Flag (-a als Kurzform) entfernt alle Build-Cache-Einträge. Dies schließt auch Cache-Einträge ein, die mit ungetaggten Zwischenbuild-Images verknüpft sind.

Führen wir den Befehl zur vollständigen Cache-Bereinigung aus:

docker builder prune --all

Sie werden zur Bestätigung aufgefordert. Geben Sie y ein und drücken Sie Enter, um fortzufahren.

WARNING! This will remove all build cache.
Are you sure you want to continue? [y/N] y

Die Ausgabe zeigt alle gelöschten Build-Cache-Einträge und den insgesamt freigegebenen Speicherplatz an. Dieser Befehl gibt typischerweise den meisten Speicherplatz frei im Vergleich zur Bereinigung ohne --all-Flag oder mit Filtern.

Nach Ausführung dieses Befehls wird ein erneuter Build des cache-demo-Images deutlich länger dauern, da der gesamte Build-Cache entfernt wurde und Docker alle Layer neu erstellen muss.

cd ~/project/docker-cache-demo
docker build -t cache-demo .

Die Verwendung von docker builder prune --all ist sinnvoll, wenn Sie maximalen Speicherplatz freigeben möchten oder einen sauberen Build ohne bestehenden Cache garantieren wollen. Beachten Sie jedoch, dass nachfolgende Builds deutlich langsamer sein werden, bis neuer Cache generiert wurde.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Docker Build-Cache mit dem Befehl docker buildx prune verwaltet. Wir begannen mit dem Bau eines einfachen Docker-Images, um Build-Cache zu generieren, und beobachteten, wie Docker Layer für schnellere nachfolgende Builds wiederverwendet.

Anschließend haben wir verschiedene Methoden zur Bereinigung des Build-Caches untersucht. Wir lernten:

  • Wie man den gesamten Build-Cache ohne Filter bereinigt
  • Wie man kürzlich verwendete Cache-Daten mit der --filter-Option behält
  • Wie man die Cache-Größe mit --keep-storage begrenzt
  • Wie man schließlich den gesamten Build-Cache inklusive interner Images mit dem --all-Flag entfernt

Diese Techniken sind essenziell für die Verwaltung von Speicherplatz und die Optimierung von Build-Umgebungen.