Table of Contents

Docker Compose

← 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 malte70/bbs.qotd:

docker-compose.yml
# 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

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 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:

.env
# Version tag
IMAGE_TAG=latest
 
# External port number
PORT=17
docker-compose.yml
# docker-compose.yml for malte70/bbs.qotd
services:
  qotd:
    image: malte70/bbs.qotd:${IMAGE_TAG}
    ports:
      - ${PORT}:10017'