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.
> docker-compose -f /.../docker-compose-postgres.yml up

## pgAdmin 
pgAdmin ist ein grafisches Administrationswerkezug 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) |

 
