====== 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'