Veröffentlichung der Compose-Anwendung inklusive Umgebungsvariablen
In diesem Schritt lernen wir, wie Umgebungsvariablen in unsere Docker Compose-Anwendung integriert werden und wie sich dies auf die Veröffentlichung auswirkt. Umgebungsvariablen sind eine gängige Methode zur Konfiguration von Anwendungen, und Docker Compose bietet mehrere Möglichkeiten, diese zu verwalten.
Zuerst stoppen wir den laufenden Nginx-Container aus dem vorherigen Schritt. Navigieren Sie in das Verzeichnis ~/project
, falls Sie sich nicht bereits dort befinden.
cd ~/project
Stoppen Sie die laufenden Services mit dem Befehl docker-compose down
.
docker-compose down
Nun modifizieren wir unsere docker-compose.yaml
-Datei, um eine Umgebungsvariable zu verwenden. Wir fügen dem web
-Service eine einfache Umgebungsvariable hinzu. Öffnen Sie die docker-compose.yaml
-Datei im Verzeichnis ~/project
mit nano
.
nano ~/project/docker-compose.yaml
Fügen Sie einen environment
-Abschnitt zur web
-Service-Definition hinzu. Wir fügen eine Variable namens MY_VARIABLE
mit einem Wert hinzu.
version: "3.8"
services:
web:
image: nginx@sha256:your_image_digest_here ## Ersetzen Sie dies mit Ihrem tatsächlichen Digest
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
Vergessen Sie nicht, your_image_digest_here
durch den tatsächlichen Image-Digest aus dem vorherigen Schritt zu ersetzen.
Speichern Sie die Datei mit Strg + S
und beenden Sie den Editor mit Strg + X
.
Wenn Sie die Anwendung nun mit docker-compose up
starten, wird die Umgebungsvariable MY_VARIABLE
im Nginx-Container gesetzt.
docker-compose up -d
Um zu überprüfen, ob die Umgebungsvariable im Container gesetzt ist, können wir einen Befehl innerhalb des laufenden Containers mit docker exec
ausführen. Ermitteln Sie zuerst die Container-ID mit docker ps
.
docker ps
Notieren Sie die Container-ID des laufenden Nginx-Containers. Führen Sie dann mit docker exec
den Befehl printenv
im Container aus und filtern Sie die Ausgabe nach MY_VARIABLE
.
docker exec < container_id > printenv | grep MY_VARIABLE
Ersetzen Sie <container_id>
durch die tatsächliche ID Ihres laufenden Nginx-Containers. Sie sollten eine Ausgabe ähnlich zu MY_VARIABLE=HelloFromCompose
sehen.
Bei der Veröffentlichung einer Compose-Anwendung, die Umgebungsvariablen verwendet, müssen Sie berücksichtigen, wie diese Variablen in der Zielumgebung bereitgestellt werden.
Ein gängiger Ansatz ist die Verwendung einer .env
-Datei. Docker Compose sucht automatisch nach einer Datei namens .env
im Verzeichnis, in dem sich die docker-compose.yaml
-Datei befindet. Sie können Umgebungsvariablen in dieser Datei definieren, und Compose lädt sie.
Erstellen wir eine .env
-Datei im Verzeichnis ~/project
.
nano ~/project/.env
Fügen Sie folgenden Inhalt zur .env
-Datei hinzu:
ANOTHER_VARIABLE=ThisIsFromDotEnv
Speichern Sie die Datei und beenden Sie nano
.
Nun modifizieren wir die docker-compose.yaml
-Datei, um diese neue Umgebungsvariable zu verwenden. Öffnen Sie die docker-compose.yaml
-Datei erneut.
nano ~/project/docker-compose.yaml
Fügen Sie ANOTHER_VARIABLE
zum environment
-Abschnitt hinzu.
version: "3.8"
services:
web:
image: nginx@sha256:your_image_digest_here ## Ersetzen Sie dies mit Ihrem tatsächlichen Digest
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
- ANOTHER_VARIABLE
Beachten Sie, dass wir für ANOTHER_VARIABLE
nur den Variablennamen angegeben haben. Compose sucht nach dieser Variable in der Umgebung, in der docker-compose up
ausgeführt wird, einschließlich der aus der .env
-Datei geladenen Variablen.
Speichern Sie die Datei und beenden Sie nano
.
Stoppen und starten Sie nun die Compose-Anwendung neu, um die Änderungen zu übernehmen.
docker-compose down
docker-compose up -d
Ermitteln Sie die neue Container-ID mit docker ps
.
docker ps
Verwenden Sie nun docker exec
, um beide Umgebungsvariablen im Container zu überprüfen.
docker exec < container_id > printenv | grep MY_VARIABLE
docker exec < container_id > printenv | grep ANOTHER_VARIABLE
Ersetzen Sie <container_id>
durch die neue Container-ID. Sie sollten sowohl MY_VARIABLE=HelloFromCompose
als auch ANOTHER_VARIABLE=ThisIsFromDotEnv
in der Ausgabe sehen.
Bei der Veröffentlichung würden Sie typischerweise die docker-compose.yaml
-Datei teilen und Anweisungen bereitstellen, wie die notwendigen Umgebungsvariablen gesetzt werden können, entweder durch eine .env
-Datei oder durch direkte Setzung in der Umgebung, in der Compose ausgeführt wird. Sensible Informationen sollten nicht in der docker-compose.yaml
oder .env
-Datei hartkodiert sein und sollten mit Secrets-Management-Lösungen verwaltet werden.