Docker compose ist ein Werkzeug, mit dem mehrere Container gemeinsam gestartet und verwaltet werden können.

1. GesamtStruktur

Die Docker-compose.yaml Datei besteht aus 3 Containern:

  • backend

  • db

  • pgadmin

2. Backend

  • Image: Das Backend verwendet alpine und wird von einem vorgefertigten Image aus dem Docker Hub bereitgestellt.

  • Container Name: Der Container wird als quarkus-backend benannt.

  • Working Directory: Der Container wird im Verzeichnis /opt gestartet.

  • Volume: Dieses Volume verbindet einen Ordner vom Computer (./data/backend) mit dem Backend-Container (/opt/app), sodass Änderungen nicht verloren gehen.

  • Ports: Der Container läuft auf dem Host 8080 und kann unter localhost:8080 erreicht werden.

  • Environment Variables: Es werden Umgebungsvariablen im Container für die Datenbankverbindung gesetzt, darunter DB_HOST, POSTGRES_DB, POSTGRES_USER und POSTGRES_PASSWORD.

  • Depends On: Der Backend-Container hängt von der Datenbank ab, was bedeutet, dass die Datenbank zuerst gestartet wird.

3. DB

  • Image: Die Datenbank verwendet das offizielle PostgreSQL-Image (version: 18).

  • Container Name: Der Container wird als postgres-db benannt.

  • Environment: Diese Einstellungen geben an, wie sich der Container mit der Datenbank verbindet (Datenbankname, Benutzer, Passwort).

  • Volume: Dieses Volume verbindet einen Ordner vom Computer (./data/postgres) mit dem Datenbank-Container, sodass die Daten der Datenbank nicht verloren gehen.

  • Ports: Der Container läuft auf dem Host 5432 und kann unter localhost:5432 erreicht werden.

  • healthcheck: Es wird ein Healthcheck definiert, um die Verfügbarkeit der Datenbank zu überprüfen.

4. pgAdmin

  • Image: pgAdmin ist ein grafisches Verwaltungstool für PostgreSQL und wird von einem vorgefertigten Image aus dem Docker Hub bereitgestellt.

  • Container Name: Der Container wird als pgadmin benannt.

  • Environment: Es werden Umgebungsvariablen für die pgAdmin-Konfiguration gesetzt darunter PGADMIN_DEFAULT_EMAIL und PGADMIN_DEFAULT_PASSWORD.

  • Volume: Dieses Volume verbindet einen Ordner vom Computer (./data/pgadmin) mit dem pgAdmin-Container, sodass Einstellungen und Verbindungen gespeichert bleiben.

  • Ports: Der Container läuft auf dem Host 80 und kann unter localhost:8090 erreicht werden

5. Fragen (2.7)

Wie kann die backend-Anwendung im docker-compose-service backend enthalten sein, wenn doch gar kein eigenes docker-image erstellt wird?

Die Backend-Anwendung wird nicht im Docker-Image gespeichert, sondern beim Start über ein Volume in den Container eingebunden und dort ausgeführt. Das Image vom Container selber ist nur Java.

Wie werden die Dienste der docker-compose.yaml gestartet und gestoppt?

gestartet: docker compose up (-d) gestoppt: docker compose down

Wie können Sie die Logs der einzelnen Container einsehen, wenn die Services im Hintergrund laufen?

docker compose logs

Warum ist eine .env-Datei vorhanden?
  1. sie ist nicht nötig. Bei z.B POSTGRES_DB: ${POSTGRES_DB:-db} ist 'db' der default wert, falls es in der env datei keinen eintrag gibt namens 'POSTGRES_DB' bzw. die env datei gar nicht existiert

Ist diese überhaupt notwendig?

ii. Nein, da die Datei auch Daten enthalten kann, die nichts im Repo zu suchen haben, wie z.b Passwörter.

Was bringt swagger?

Swagger zeigt alle REST-API-Endpunkte übersichtlich an und erlaubt, sie direkt im Browser zu testen.

Muss der Port 5432 offen sein? Begründen Sie Ihre Antwort.

Nein, da das Backend über das interne Docker-Netzwerk auf die Datenbank zugreift und diese über den Servicenamen „db“ und den Port 5432 erreicht.