Direkt zum Hauptinhalt

Variablen

Docker Compose bietet die Möglichkeit Variablen aus einer Datei zu laden. Dadurch ergibt sich die Möglichkeit, bestimmte Informationen wie z. B. der Name einer Domäne in einer Datei abzulegen, sodass dieser von mehreren Compose Konfigurationen genutzt werden kann.

Der einfachste Weg ist das erstellen der Datei .env. Diese Datei wird von Docker Compose standardmäßig direkt akzeptiert und muss nicht mal in der Compsoe Konfiguration benannt sein, solange sie im selben Verzeichnis liegt. Daneben können auch eigene Dateien verwiesen werden, die einen anderen Namen haben und an einem anderen Ort liegen. Folgend die genauen Erklärungen.

Variablen mit .env

Bevor wir Variablen anlegen, erstellen wir uns erstmal eine Compose Konfiguration, in welcher wir später einige Werte durch Variablen austauschen.

services:
  webserver:
    image: nginx:latest
    container_name: webserver
    hostname: webserver
    ports:
      - 80:80

Angenommen, wir würden mehrere Webserver mit Nginx bereitstellen. Dann müssen diese alle einen eigenen Namen erhalten und die Ports müssten auch angepasst werden. Hier könnte ein Ordner als Template angelegt werden, welcher die Compose Konfiguration enthält und die .env Datei. Dann könnte dieser einfach kopiert, die .env Datei angepasst und die Konfiguration direkt gestartet werden.

Zunächst ändern wir die Compose Konfiguration wie folgt.

services:
  webserver:
    image: nginx
    container_name: ${DIENST_NAME}
    hostname: ${DIENST_NAME}
    ports:
      - ${DIENST_PORT}:80

Und schreiben nun folgendes in die .env Datei.

DIENST_NAME=webserver
DIENST_PORT=80

Dies wäre die gleiche Konfiguration wie oben, nur das diesmal nicht in der Compose Konfiguration editiert werden muss. Besonders bei komplexen Compose Konfigurationen ist der Einsatz von Variablen sehr hilfreich, um einfacher die gewünschten Parameter ändern zu können.

Um die Docker Compose Konfiguration auszuführen, kann am besten in das Verzeichnis der YAML Datei gewechselt werden. Danach wird je nach nach gewählter Installation sudo docker-compose up -d oder sudo docker compose up -d (keine Bindestrich zwischen docker und compose) eingegeben, um die Standard Konfiguration docker-compose.yml zu starten. Compose erstellt dann die gewünschten Container mit den angegeben Optionen. Sollten die Container bereits mit dieser Compose Konfiguration erstellt worden sein, so werden die Container in dieser neu erstellt, dessen Konfiguration geändert wurde.

.env Name über CLI ändern

Wenn die gewünschte .env Datei nicht im selben Ordner liegt wie die Compose Datei oder sogar einen anderen Namen hat, so kann diese auch beim docker compose up über die CLI mit angegeben werden. Dadurch wird die Standard .env überschrieben. Hierzu einfach folgenden Befehl anpassen, alle anderen Einstellungen bleiben wie im vorherigen Abschnitt beschrieben.

sudo docker compose -env-file /pfad/zur/.webserver.env up -d

Environment Variablen mit beliebigen Dateien

Wenn Variablen über mehrere Compose Konfigurationen hinweg gleich sind wie beispielsweise der Name einer Domäne, dann kann auch eine zentrale oder mehrere zentrale Dateien für Variablen erstellt und verwiesen werden. Ein Nachteil gegenüber der .env Datei ist, dass diese Dateien bei jedem Dienst hinterlegt werden müssen. Außerdem lassen sich hierüber nur Environment Variablen setzen, d. h. die oben gezeigten Anpassungen sind nicht möglich.

Um die Variablen unter Environment (in diesem Beispiel nicht vorhanden) zu setzen, kann die Compose Datei wie folgt angepasst werden.

services:
  webserver:
    image: nginx:latest
    container_name: webserver
    hostname: webserver
    ports:
      - 80:80
    env_file:
      - .webserver.env