6.1 Grundlagen der Umgebungsvariablen
Umgebungsvariablen spielen eine wichtige Rolle bei der Konfiguration von Anwendungen. Sie ermöglichen es, das Verhalten und die Parameter von Services dynamisch zu ändern, ohne den Code zu ändern. Docker Compose unterstützt die Verwendung von Umgebungsvariablen zur Konfiguration von Containern, was Flexibilität und einfache Verwaltung der Konfiguration bietet.
Eine der bequemsten Methoden zur Verwaltung von Umgebungsvariablen ist die Verwendung von .env
-Dateien. In dieser Vorlesung besprechen wir ausführlich, wie man Umgebungsvariablen in Docker Compose verwendet, einschließlich der Erstellung und Nutzung von .env
-Dateien.
Grundlagen der Umgebungsvariablen in Docker Compose
Umgebungsvariablen können in der compose.yaml
-Datei verwendet werden, um Konfigurationen zu parametrisieren. Diese Variablen können in einer .env
-Datei, direkt in der compose.yaml
-Datei oder über die Kommandozeile definiert werden.
Beispiel für die Verwendung von Umgebungsvariablen in compose.yaml
:
In diesem Beispiel werden die Variablen NGINX_VERSION
und HOST_PORT
verwendet, deren Werte entweder in der .env
-Datei oder über die Kommandozeile gesetzt werden können.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 Verwendung von .env
-Dateien
1. Erstellen einer .env
-Datei
Die .env
-Datei wird im gleichen Verzeichnis wie die compose.yaml
-Datei platziert und enthält Paarungen von "key-value", die die Werte der Umgebungsvariablen definieren. Jede Variable wird in einer neuen Zeile angegeben.
Beispiel einer .env
-Datei:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Integration der .env
-Datei mit Docker Compose
Docker Compose lädt automatisch die Variablen aus der .env
-Datei, wenn diese sich im gleichen Verzeichnis wie die compose.yaml
-Datei befindet.
Beispiel einer compose.yaml
-Datei mit Verwendung von Umgebungsvariablen:
In diesem Beispiel werden die Variablen NGINX_VERSION
, HOST_PORT
, DB_USER
und DB_PASSWORD
aus der .env
-Datei übernommen.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 Übergabe von Variablen
Übergabe von Variablen über die Kommandozeile
Du kannst Umgebungsvariablen direkt über die Kommandozeile mit dem Befehl export
in Unix-ähnlichen Systemen oder mit dem Parameter --env-file
in Docker Compose übergeben.
Beispiel für die Nutzung von export
:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
Beispiel für die Nutzung von --env-file
:
Du kannst eine alternative Datei mit Umgebungsvariablen mit dem Parameter --env-file
angeben.
docker compose --env-file .env.dev up
Verwendung von eingebauten Umgebungsvariablen in Docker Compose
Docker Compose unterstützt eingebaute Umgebungsvariablen wie ${PWD}
, die das aktuelle Arbeitsverzeichnis darstellen.
Beispiel:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 Praktische Beispiele
Praktische Beispiele zur Verwendung von Umgebungsvariablen:
Beispiel 1: Konfiguration eines Webservers und einer Datenbank
Erstelle eine Datei .env
mit Parametern für den Webserver und die Datenbank:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
Erstelle eine Datei compose.yaml
, die diese Variablen verwendet:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Starte Docker Compose:
docker compose up
Beispiel 2: Trennung von Entwicklungs- und Produktionsumgebungen
Erstelle zwei .env
-Dateien für verschiedene Umgebungen: .env.dev
und .env.prod
.
Datei .env.dev
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
Datei .env.prod
:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
Erstelle eine Datei compose.yaml
, die Variablen aus diesen Dateien verwendet:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Starte Docker Compose für die Entwicklung:
docker compose --env-file .env.dev up
Starte Docker Compose für die Produktion:
docker compose --env-file .env.prod up
GO TO FULL VERSION