Einführung
In diesem Lab lernen Sie, wie Sie den Befehl docker stack config verwenden, um die endgültige, zusammengeführte Konfiguration Ihrer Docker Compose-Dateien zu untersuchen. Dies ist eine entscheidende Fähigkeit, um zu verstehen, wie Docker Ihre Compose-Definitionen interpretiert, insbesondere wenn Sie mit mehreren Dateien oder Umgebungsvariablen arbeiten. Sie beginnen damit, die Konfiguration aus einer einzelnen Compose-Datei auszugeben, einschließlich der erforderlichen Schritte zur Installation von Docker Compose in der LabEx-Umgebung.
Danach werden Sie untersuchen, wie Sie die Konfiguration aus mehreren Compose-Dateien zusammenführen und ausgeben können, um zu zeigen, wie Docker Definitionen aus verschiedenen Quellen kombiniert. Sie lernen auch, wie Sie die Konfiguration direkt aus der Standardeingabe ausgeben können und wie Sie die Interpolation von Umgebungsvariablen beim Generieren der Konfigurationsausgabe überspringen können. Diese Schritte geben Ihnen ein umfassendes Verständnis der Möglichkeiten des Befehls docker stack config zum Debuggen und Verifizieren Ihrer Docker Compose-Setups.
Geben Sie die endgültige Konfiguration aus einer einzelnen Compose-Datei aus
In diesem Schritt lernen Sie, wie Sie die endgültige Konfiguration aus einer einzelnen Docker Compose-Datei ausgeben. Dies ist nützlich für das Debugging oder das Verständnis des endgültigen Zustands Ihrer Compose-Datei, nachdem alle Variablen und Erweiterungen verarbeitet wurden.
Zunächst installieren wir Docker Compose. Da es in der LabEx-VM-Umgebung nicht vorinstalliert ist, müssen wir es herunterladen und installieren. Wir werden die neueste stabile Version herunterladen.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Dieser Befehl lädt die Docker Compose-Binary aus dem offiziellen GitHub-Repository herunter. $(uname -s) und $(uname -m) werden verwendet, um das Betriebssystem und die Architektur der VM zu ermitteln und sicherzustellen, dass Sie die richtige Binary herunterladen.
Als nächstes müssen wir der heruntergeladenen Binary ausführbare Berechtigungen geben.
sudo chmod +x /usr/local/bin/docker-compose
Dieser Befehl macht den docker-compose-Befehl ausführbar.
Jetzt überprüfen wir die Installation, indem wir die Version prüfen.
docker-compose --version
Sie sollten die installierte Version von Docker Compose in der Konsole sehen.
Bevor wir die Konfiguration ausgeben können, benötigen wir eine Docker Compose-Datei. Erstellen wir eine einfache in das Verzeichnis ~/project.
nano ~/project/docker-compose.yaml
Fügen Sie den folgenden Inhalt in die docker-compose.yaml-Datei ein:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
Dies ist eine einfache Compose-Datei, die einen einzelnen Service namens web mit dem nginx:latest-Image definiert und Port 80 auf dem Host auf Port 80 im Container abbildet.
Speichern Sie die Datei, indem Sie Strg + X, dann Y und Enter drücken.
Jetzt navigieren Sie in das Verzeichnis ~/project, in dem Sie die docker-compose.yaml-Datei gespeichert haben.
cd ~/project
Um die endgültige Konfiguration aus dieser Compose-Datei auszugeben, verwenden wir den Befehl docker-compose config.
docker-compose config
Dieser Befehl liest die docker-compose.yaml-Datei im aktuellen Verzeichnis und gibt die endgültige zusammengeführte Konfiguration an die Standardausgabe aus. Sie sollten den YAML-Inhalt Ihrer docker-compose.yaml-Datei sehen, möglicherweise mit einigen zusätzlichen Standardwerten, die von Docker Compose hinzugefügt wurden.
Kombinieren und Ausgabe der Konfiguration aus mehreren Compose-Dateien
In diesem Schritt lernen Sie, wie Sie Konfigurationen aus mehreren Docker Compose-Dateien zusammenführen und die endgültige kombinierte Konfiguration ausgeben. Dies ist eine leistungsstarke Funktion, die es Ihnen ermöglicht, eine Basis-Konfiguration zu definieren und diese dann mit zusätzlichen Dateien zu überschreiben oder zu erweitern. Dies ist nützlich für die Verwaltung unterschiedlicher Umgebungen (z. B. Entwicklung, Staging, Produktion).
Wir werden weiterhin im Verzeichnis ~/project arbeiten. Im vorherigen Schritt haben wir eine docker-compose.yaml-Datei erstellt. Jetzt erstellen wir eine weitere Compose-Datei, um die Basis-Konfiguration zu erweitern. Wir nennen sie docker-compose.override.yaml.
nano ~/project/docker-compose.override.yaml
Fügen Sie den folgenden Inhalt in die docker-compose.override.yaml-Datei ein:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
Diese Überschreibungsdatei modifiziert den in docker-compose.yaml definierten web-Service. Sie ändert die Host-Port-Zuordnung von 80 auf 8080 und fügt eine Volume-Mount hinzu, um statischen HTML-Inhalt aus einem lokalen Verzeichnis namens html zu servieren.
Speichern Sie die Datei, indem Sie Strg + X, dann Y und Enter drücken.
Jetzt erstellen wir das html-Verzeichnis und eine einfache index.html-Datei darin.
mkdir ~/project/html
nano ~/project/html/index.html
Fügen Sie den folgenden Inhalt in ~/project/html/index.html ein:
<h1>Hello from Nginx!</h1>
Speichern Sie die Datei, indem Sie Strg + X, dann Y und Enter drücken.
Standardmäßig sucht Docker Compose automatisch nach docker-compose.yaml und docker-compose.override.yaml im aktuellen Verzeichnis und führt sie zusammen. Die Konfigurationen in der Überschreibungsdatei haben Vorrang.
Um die zusammengeführte Konfiguration zu sehen, stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden, und führen Sie erneut den Befehl docker-compose config aus.
cd ~/project
docker-compose config
Sie sollten jetzt die kombinierte Konfiguration sehen, bei der der web-Service die Port-Zuordnung 8080:80 und die Volume-Mount ./html:/usr/share/nginx/html hat.
Sie können auch explizit angeben, welche Compose-Dateien Sie mit der Option -f verwenden möchten. Die Reihenfolge, in der Sie die Dateien angeben, ist wichtig, da spätere Dateien frühere überschreiben.
Beispielsweise können Sie die folgenden Befehle ausführen, um docker-compose.yaml und docker-compose.override.yaml explizit zusammenzuführen:
docker-compose -f docker-compose.yaml -f docker-compose.override.yaml config
In diesem Fall wird die gleiche zusammengeführte Ausgabe erzeugt wie beim Ausführen von docker-compose config ohne die Option -f, da docker-compose.override.yaml automatisch erkannt und nach docker-compose.yaml zusammengeführt wird.
Konfiguration aus der Standardeingabe (stdin) ausgeben
In diesem Schritt lernen Sie, wie Sie die endgültige Konfiguration aus einer Docker Compose-Datei ausgeben, die über die Standardeingabe (stdin) bereitgestellt wird. Dies ist nützlich, wenn Sie eine Compose-Datei dynamisch generieren möchten oder die Ausgabe eines anderen Befehls direkt an docker-compose config weiterleiten möchten.
Wir werden weiterhin im Verzeichnis ~/project arbeiten. Anstatt aus einer Datei zu lesen, leiten wir den Inhalt einer Compose-Konfiguration direkt an den Befehl docker-compose config weiter.
Lassen Sie uns den Befehl cat verwenden, um den Inhalt unserer docker-compose.yaml-Datei auszugeben und ihn an docker-compose config zu leiten.
cd ~/project
cat docker-compose.yaml | docker-compose config -f -
In diesem Befehl:
cat docker-compose.yamlgibt den Inhalt derdocker-compose.yaml-Datei an die Standardausgabe aus.|ist der Pipe-Operator, der die Standardausgabe descat-Befehls an die Standardeingabe desdocker-compose config-Befehls leitet.docker-compose config -f -teiltdocker-compose configmit, die Konfiguration aus der Standardeingabe (-) anstatt aus einer Datei zu lesen.
Sie sollten die gleiche Ausgabe sehen wie beim Ausführen von docker-compose config im ersten Schritt, also die Konfiguration aus docker-compose.yaml.
Sie können auch direkt eine andere Konfiguration weiterleiten. Beispielsweise leiten wir eine einfache Konfiguration für einen redis-Service weiter.
echo "version: '3.8'\nservices:\n redis:\n image: redis:latest" | docker-compose config -f -
In diesem Befehl:
echo "version: '3.8'\nservices:\n redis:\n image: redis:latest"gibt die YAML-Zeichenfolge für eine einfache Compose-Datei mit einemredis-Service aus. Das\nerzeugt Zeilenumbrüche in der Ausgabe.|leitet diese Zeichenfolge an dendocker-compose config-Befehl weiter.docker-compose config -f -liest die Konfiguration aus der Standardeingabe.
Die Ausgabe sollte die YAML-Konfiguration für den redis-Service sein.
Diese Methode ist besonders nützlich, wenn Sie Compose-Konfigurationen programmgesteuert generieren oder wenn Sie eine Konfiguration schnell testen möchten, ohne sie in einer Datei zu speichern.
Ausgabe der kombinierten Konfiguration ohne Variablenersetzung
In diesem Schritt lernen Sie, wie Sie die zusammengeführte Konfiguration aus mehreren Docker Compose-Dateien ausgeben, während Sie die Variablenersetzung überspringen. Standardmäßig ersetzt docker-compose config Umgebungsvariablen. Das Überspringen der Variablenersetzung kann nützlich sein, wenn Sie die Rohkonfiguration mit den noch vorhandenen Variablen sehen möchten, beispielsweise beim Debuggen oder beim Generieren einer Vorlage.
Wir werden weiterhin im Verzeichnis ~/project mit unseren docker-compose.yaml- und docker-compose.override.yaml-Dateien arbeiten.
Zunächst fügen wir eine Umgebungsvariable zu unserer docker-compose.yaml-Datei hinzu, um die Variablenersetzung zu demonstrieren.
nano ~/project/docker-compose.yaml
Ändern Sie die docker-compose.yaml-Datei, um eine Umgebungsvariable im Image-Namen einzubeziehen:
version: "3.8"
services:
web:
image: nginx:${NGINX_VERSION:-latest}
ports:
- "80:80"
Hier ist ${NGINX_VERSION:-latest} eine Variable, die durch den Wert der Umgebungsvariable NGINX_VERSION ersetzt wird. Wenn NGINX_VERSION nicht gesetzt ist, wird der Standardwert latest verwendet.
Speichern Sie die Datei, indem Sie Strg + X, dann Y und Enter drücken.
Jetzt setzen wir die Umgebungsvariable NGINX_VERSION und führen dann docker-compose config aus, um die Variablenersetzung in Aktion zu sehen.
cd ~/project
export NGINX_VERSION=1.21
docker-compose config
Sie sollten die zusammengeführte Konfiguration sehen, und der Image-Name für den web-Service sollte jetzt nginx:1.21 sein.
Um die zusammengeführte Konfiguration ohne Variablenersetzung auszugeben, verwenden wir die Option --no-interpolate mit dem Befehl docker-compose config.
docker-compose --no-interpolate config
Diesmal sollte die Ausgabe den Image-Namen als nginx:${NGINX_VERSION:-latest} anzeigen, wobei der Variablenplatzhalter noch vorhanden ist, auch wenn die Umgebungsvariable NGINX_VERSION gesetzt ist.
Diese Option ist hilfreich, wenn Sie die genaue Konfiguration sehen möchten, wie sie in Ihren Compose-Dateien geschrieben ist, bevor eine Variablenersetzung stattfindet.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie den Befehl docker-compose config verwenden, um die endgültige Konfiguration von Docker Compose-Dateien zu überprüfen. Sie haben begonnen, indem Sie Docker Compose in der LabEx-VM-Umgebung installiert haben. Dabei haben Sie sichergestellt, dass Sie die richtige Binärdatei für die Systemarchitektur heruntergeladen und ihr ausführbare Berechtigungen erteilt haben. Anschließend haben Sie die Installation überprüft, indem Sie die Version geprüft haben.
Nach der Installation haben Sie eine einfache docker-compose.yaml-Datei erstellt, die einen grundlegenden Web-Service definiert. Anschließend haben Sie den Befehl docker-compose config verwendet, um die endgültige Konfiguration aus dieser einzelnen Compose-Datei auszugeben. Dadurch haben Sie gezeigt, wie Sie den verarbeiteten Zustand Ihrer Compose-Definition anzeigen können.



