Mit docker compose lassen sich komplexe Umgebungen bestehend aus mehreren Containern (Container-Stacks) in YAML-Dateien definieren und mit nur einem Befehl alle notwendigen Container starten (z.B. Anwendung und Datenbank-Server).
Als Beispiel eine docker-compose.yml-Datei für das Image malte70/bbs.qotd:
# docker-compose.yml for malte70/bbs.qotd services: qotd: image: malte70/bbs.qotd ports: - 17:10017'
In diesem Beispiel gibt es nur einen Service/Container, in dem das Image malte70/bbs.qotd läuft, und Port 17 des Hosts zum Container-Port 10017 weitergeleitet wird.
Üblicherweise legt man für jede Anwendung/Container-Stack einen Ordner an, in dem mindestens eine docker-compose.yml-Datei liegt. Danach startet der folgende Befehl den Container-Stack:
docker compose up -d
Falls ein anderer Dateiname statt docker-compose.yml verwendet werden soll, geht das über die compose-Option -f <file.yml>:
docker compose -f docker-compose.qotd.yml up -d
Damit lokale Einstellungen und erst recht Passwörter nicht direkt in der docker-compose.yml stehen müssen, kann eine DotEnv-Datei (mit dem Namen .env) verwendet werden.
DotEnv-Dateien (Dateiname.env) sind eine gängige Möglichkeit für eine einfache Anwendungs-Konfiguration. Variablen werden wie in Shell-Skripten definiert (ohneexport!),
Falls im gleichen Verzeichnis wie die docker-compose.yml eine .env-Datei gefunden werden, wird diese automatisch eingelesen, und die Variablen können an beliebiger Stelle in der Compose-Datei wie von Shell-Skripten bekannt über die ${MY_VAR}-Syntax verwendet werden:
# Version tag IMAGE_TAG=latest # External port number PORT=17
# docker-compose.yml for malte70/bbs.qotd services: qotd: image: malte70/bbs.qotd:${IMAGE_TAG} ports: - ${PORT}:10017'