https://geshan.com.np/blog/2021/12/docker-postgres/
https://belowthemalt.com/2021/06/09/run-postgresql-and-pgadmin-in-docker-for-local-development-using-docker-compose/
https://thibaut-deveraux.medium.com/how-to-install-neo4j-with-docker-compose-36e3ba939af0
https://towardsdatascience.com/how-to-run-postgresql-and-pgadmin-using-docker-3a6a8ae918b5

# Installation Docker Desktop

## Starten eines Containers:

> docker run --name basic-postgres --rm -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=4y7sV96vA9wv46VR -e
> PGDATA=/var/lib/postgresql/data/pgdata -v /tmp:/var/lib/postgresql/data -p 5432:5432 -it postgres:14.1-alpine

Dieser Befehl startet einen Container mit dem Postgres14.1-alpine Image, welches von Dockerhub geladen wird. Der
Container läuft unter dem Namen basic-postgres

| Syntax            | Attribut | Beschreibung                                                                      |
|-------------------|----------|-----------------------------------------------------------------------------------|
| basic-postgres    | --name   | Angabe des Containernamens                                                        |
|                   | --rm     | Bei Beendigung des Containers wird das erstellte Dateisystem entfernt             |
|                   | -e       | Verwende Umgebungsvariablen                                                       |
| POSTGRES_USER     |          | Umgebungsvariable für den anzulegenden Benutzer: postgres                         |
| POSTGRES_PASSWORD |          | Umgebungsvariable für das anzulegende Passwort: 4y7sV96vA9wv46VR                  |
| PGDATA            |          | Umgebungsvariable für den Ort der Datenbank                                       |
|                   | -v       | Einzubindendes Volumen: /tmp:/var/lib/postgresql/data                             |
|                   | -p       | Angabe des Containerports und des öffentlich zugänglichen Ports                   |
|                   | -it      | Interactive: der Container bleibt aktiv, damit mit diesem interagiert werden kann |

Mit einem zweiten Terminalfenster kann man auf die Bash des Containers öffnen und auf die Datenbank zugreifen.

> docker exec -it basic-postgres /bin/sh

Die folgenden Befehle starten die Postgres CLI, Ausgabe aller Datenbanken und beendet die CLI.
> Psql –username postgres \
> \l \
> Exit

Der Container kann durch Betätigung von STRG + C beendet werden.

## Docker Compose

Das oben erklärte Vorgehen zum Starten eines Containers, festlegen der Umgebungsvariablen und zusätzliche verlinken zu
einer Anwendung wird nun in einer yml-Datei beschrieben, um die Verwaltung und das Erstellen zu vereinfachen.

|          |             | Beschreibung                                                                                                        |
|----------|-------------|---------------------------------------------------------------------------------------------------------------------|
| Version  |             | Version von docker-compose                                                                                          |
| Services |             | Definition der Services, wobei jeder ein eigenen docker-run Befehl ausführt.                                        |
|          | image       | Angabe des zu verwendenden Images                                                                                   |
|          | restart     | Option um Container erneut zu starten, falls dieser gestoppt wird                                                   |
|          | Environment | Umgebungsvariablen: Username und Passwort                                                                           |
|          | Ports       | Mapping des Containerports zum Port der Hostmaschine                                                               |
|          | Volumes     | Angabe eines Volumes zum Persistieren der Containerdaten, damit nach einem Neustart die Daten wieder verfügbar sind |

Nun kann der Container mittels Docker-Compose gestartet werden.

```console
docker-compose -f /.../docker-compose-postgres.yml up
```

## pgAdmin

pgAdmin ist ein grafisches Administrationswerkzeug für postgreSQL und macht die oben gezeigte Administration
komfortabler.

Erreichbar ist das Interface über: http://localhost:5050

Als Login werden die Daten aus der docker-compose verwendet:

```
> User: admin@fh-swf.de
> Passwort: admin
```

### Anlegen eines Servers

Zuerst muss der Server angelegt werden, dafür einen Rechtsklick auf Server und den Button „Register“ auswählen. \
Im geöffneten Dialog muss die Konfiguration festgelegt werden.

| Reiter     | Parameter         | Wert                              |
|------------|-------------------|-----------------------------------|
| General    | Name              | postgres_docker                   |
| Connection | Host name/address | local_pgdb (siehe docker-compose) |
| Connection | Username          | postgres (siehe docker-compose)   |
| Connection | Password          | postgres (siehe docker-compose)   |
