Services mit Build-Argumenten und ohne Cache erstellen
In diesem Schritt werden wir zwei erweiterte Build-Optionen mit Docker Compose untersuchen: die Verwendung von Build-Argumenten und das Erstellen ohne Cache.
Build-Argumente ermöglichen es Ihnen, Variablen an den Docker-Build-Prozess zu übergeben. Dies ist nützlich, um den Build basierend auf verschiedenen Umgebungen oder Konfigurationen anzupassen, ohne die Dockerfile
selbst zu ändern.
Zuerst passen wir unsere Dockerfile
an, um ein Build-Argument zu akzeptieren. Öffnen Sie die Dockerfile
zur Bearbeitung:
nano ~/project/Dockerfile
Ändern Sie den Inhalt wie folgt:
FROM ubuntu:latest
ARG MESSAGE="Hello from build argument!"
RUN apt-get update && apt-get install -y cowsay
CMD ["cowsay", "$MESSAGE"]
Wir haben eine ARG MESSAGE
-Anweisung hinzugefügt, um ein Build-Argument namens MESSAGE
mit einem Standardwert zu definieren. Wir haben auch die CMD
-Anweisung geändert, um dieses Argument zu verwenden.
Speichern Sie die Dockerfile
mit Strg + X
, dann Y
und Enter
.
Nun passen wir unsere docker-compose.yml
-Datei an, um einen Wert an dieses Build-Argument zu übergeben. Öffnen Sie die Datei zur Bearbeitung:
nano ~/project/docker-compose.yml
Ändern Sie den Inhalt wie folgt:
version: "3.8"
services:
cow:
build:
context: .
args:
MESSAGE: "Custom message from Compose!"
Wir haben die build:
-Direktive in ein Objekt mit context:
und args:
geändert.
context: .
gibt den Build-Kontext an, also das Verzeichnis mit der Dockerfile
.
args:
ist eine Map von Build-Argumenten, die an die Dockerfile
übergeben werden. Wir übergeben den Wert "Custom message from Compose!"
an das MESSAGE
-Argument.
Speichern Sie die docker-compose.yml
-Datei mit Strg + X
, dann Y
und Enter
.
Nun erstellen wir das Image mit dem Build-Argument. Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project
befinden.
cd ~/project
docker-compose build
Beobachten Sie die Build-Ausgabe. Sie sollten sehen, dass das Build-Argument während des Build-Prozesses verwendet wird.
Nach Abschluss des Builds führen wir einen Container aus diesem Image aus, um die Ausgabe zu sehen.
docker run project_cow
Sie sollten die cowsay
-Ausgabe mit der Nachricht "Custom message from Compose!" sehen. Dies bestätigt, dass das Build-Argument erfolgreich übergeben und verwendet wurde.
Manchmal möchten Sie Docker zwingen, alle Ebenen neu zu erstellen und den Cache zu ignorieren. Dies ist nützlich, wenn Sie Caching-Probleme vermuten oder einen sauberen Build sicherstellen möchten. Sie können dies mit dem --no-cache
-Flag beim docker-compose build
-Befehl tun.
Versuchen wir, das Image mit dem --no-cache
-Flag neu zu erstellen.
docker-compose build --no-cache
Beobachten Sie die Build-Ausgabe erneut. Diesmal werden Sie sehen, dass Docker keine zwischengespeicherten Ebenen verwendet und jeden Schritt in der Dockerfile
neu erstellt. Dieser Prozess dauert länger als ein Build mit Cache.
Nach Abschluss des Builds können Sie den Container erneut ausführen, um zu bestätigen, dass die Nachricht immer noch diejenige ist, die über das Build-Argument übergeben wurde.
docker run project_cow
Sie sollten weiterhin "Custom message from Compose!" sehen. Das --no-cache
-Flag betrifft nur den Build-Prozess, nicht die in docker-compose.yml
definierte Konfiguration.