====== Docker Compose ======
[[:docker:start|← Zurück zu :docker:start]]
===== Start einer Umgebung mit docker compose =====
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 [[https://hub.docker.com/r/malte70/bbs.qotd|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 '':
docker compose -f docker-compose.qotd.yml up -d
===== Beispiel: Variablen in .env-Datei =====
Damit lokale Einstellungen und erst recht Passwörter nicht direkt in der ''docker-compose.yml'' stehen müssen, kann eine [[https://www.dotenv.org/|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 (ohne ''export''!),
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'