Docker/Datenbank/PostgreSQL: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „== PostgreSQL == PostgreSQL behauptet sich schon seit vielen Jahren auf dem Markt der Open-Source- Datenbanken * Mit Features, die sonst nur sehr teure Enterprise-Datenbanksysteme aufweisen, hat sich PostgreSQL bei vielen großen Projekten als Datenbank der Wahl bewährt Im Unterschied zu MySQL/MariaDB bietet PostgreSQL neben dem klassischen relationalen Datenbankmodell auch einen objektorientierten Zugang, der zum Beispiel die Vererbung von Tabellen erm…“ |
K Dirkwagner verschob die Seite Docker/Buch/10 Datenbanken/PostgreSQL nach Docker/Datenbank/PostgreSQL |
(kein Unterschied)
| |
Aktuelle Version vom 11. November 2026, 12:51 Uhr
PostgreSQL
PostgreSQL behauptet sich schon seit vielen Jahren auf dem Markt der Open-Source- Datenbanken
- Mit Features, die sonst nur sehr teure Enterprise-Datenbanksysteme aufweisen, hat sich PostgreSQL bei vielen großen Projekten als Datenbank der Wahl bewährt
Im Unterschied zu MySQL/MariaDB bietet PostgreSQL neben dem klassischen relationalen Datenbankmodell auch einen objektorientierten Zugang, der zum Beispiel die Vererbung von Tabellen ermöglicht Was wir zuvor für Docker und MariaDB gesagt haben, gilt auch für PostgreSQL
- Viele
PostgreSQL-Container parallel zu betreiben, widerspricht der Konzeption dieser Datenbank
- Für produktive Umgebungen mit vielen Zugriffen auf die Datenbank ist eine hochverfügbare, dedizierte Datenbankumgebung das Mittel der Wahl
Bei der Entwicklung oder für kleinere Projekte eignet sich PostgreSQL im Docker- Container aber auf jeden Fall
- Sie profitieren allein schon davon, dass Sie exakt bestimmen können, welche Version von PostgreSQL Sie verwenden möchten, und dass die
Dateien bei der Installation nicht im Betriebssystem Ihrer Entwicklermaschine verteilt werden, sondern mit einem Kommando restlos gelöscht werden können
Die Docker-Images von PostgreSQL auf dem Docker Hub sind sehr gut gewartet und liegen in den letzten fünf Versionen vor, jeweils wahlweise auf Debiander Alpine- Basis
- Der Größenunterschied ist bei diesen Images beträchtlich (siehe Tabelle 10.2)
Image-Variante Image-Größe Basis-Image
postgres:15 412 MByte Debian Bookworm Slim (12)
postgres:15-alpine 237 MByte Alpine Linux 3.18
Tabelle 10.2 Der Größenunterschied der PostgreSQL-15-Docker-Images
Wie MariaDB/MySQL berücksichtigt auch PostgreSQL Shell-Scripts (*.sh) oder SQL- Dateien (*.sql, *.sql.gz) im Verzeichnis /docker-entrypoint-initdb.d, die beim Start des Containers ausgeführt beziehungsweise in die Datenbank importiert werden
- In
Verbindung mit docker compose oder docker stack deploy können Sie so Datenbankbenutzer oder Stored Procedures anlegen, ohne ein eigenes Docker-Image bauen zu müssen
PostgreSQL und pgAdmin mit docker compose Für viele Datenbankprofis ist die Kommandozeile das Mittel der Wahl, um Arbeiten an der Datenbank durchzuführen
- Für einen schnellen Überblick kann aber eine grafische Benutzeroberfläche sehr hilfreich sein
- Für PostgreSQL gibt es schon seit längerer Zeit ein Werkzeug namens pgAdmin
- Was früher eine Desktop-Anwendung war, ist seit Version 4 eine sehr moderne und angenehm zu bedienende Weboberfläche
pgAdmin 4 bietet vieles, was das Herz eines Datenbankadministrators erfreut: Grafiken zur Auslastung, ein Abfragewerkzeug und natürlich eine Übersicht über alle Elemente der Datenbank
Beispieldaten Wir haben einen Beispieldatensatz als PostgreSQL-Dump für Sie auf GitHub hinterlegt
- Klonen Sie einfach das Git-Repo von https://github.com/docker-compendium/
docker4-samples, oder laden Sie den komprimierten Dump aus dem init-Ordner herunter
- Die Datenbank enthält mehr als 190.000 geografisch referenzierte Objekte in
Deutschland aus dem freien Datensatz von https://www.geonames.org
Die folgende compose.yaml-Datei startet einen Container mit der aktuellen Postgre- SQL-Version und einen weiteren Container mit dem pgAdmin-Web-Frontend (in diesem Fall auf dem lokalen Port 5050)
- Datei : db / postgres / compose
- yaml services
db
image : postgres :15 environm e nt POSTGRES_ P A S SW O R D : geheim POSTGRES_ D B : geonames volumes - ./ init :/ docker - entrypoint - initdb
- d
- pgdata :/ var / lib / postgresq l / data pgadmin image : dpage / pgadmin4 ports - 5050:80 volumes - pgadmind a t a :/ var /lib / pgadmin environm e nt PGADMIN_D E F A UL T _ E M AI L : info@dock e r b u ch
- info
PGADMIN_D E F A UL T _ P A SS W O R D : geheim volumes
pgdata pgadmind a t a
Wie bereits erwähnt, unterstützt PostgreSQL eine Datenbankinitialisierung während des Starts im Ordner /docker-entrypoint-initdb.d
- Wenn Sie die Beispieldatei von
GitHub im init-Verzeichnis abgespeichert haben oder einen anderen PostgreSQL- Dump dort platziert haben, werden Sie beim Start der Container eine ähnliche Ausgabe wie diese sehen (hier gekürzt)
[...] db_1 | server started db_1 | CREATE DATABASE db_1 | /usr / local / bin / docker - entrypoin t
- sh : running / docker - e
db_1 | SET [...] db_1 | CREATE TABLE db_1 | ALTER TABLE
Nachdem der Datenbankserver gestartet wurde, erstellt PostgreSQL die Datenbank, die Sie als Umgebungsvariable POSTGRES_DB in der compose.yaml-Datei definiert haben Anschließend importiert das docker-entrypoint.sh-Script den Datenbank-Dump
- Ob mit oder ohne Demodaten, Sie erreichen pgAdmin jetzt unter der Adresse http://
localhost:5050
- Geben Sie beim ersten Login den Benutzernamen und das Passwort aus den Umgebungsvariablen des pgadmin -Containers ein, und fügen Sie anschlie- ßend einen Server mit dem Link Add New Server im Dashboard hinzu
- Im folgenden
Dialog stellen Sie den Host-Namen (db), den Benutzernamen (postgres) und das Passwort (geheim) für die Datenbank ein (siehe Abbildung 10.1)
Abbildung 10.1 Die Datenbankverbindung im pgAdmin-Web-Frontend
Wenn Sie die Demodaten importiert haben, können Sie jetzt im linken Teil der Oberfläche zur geonames -Datenbank navigieren
- Unter Schemas • public • Tables finden
Sie die importierten Daten (siehe Abbildung 10.2)
Abbildung 10.2 Das Web-Frontend »pgAdmin 4« mit der »geonames«-Demo-Datenbank
Backups mit docker compose Für Backups gilt auch bei PostgreSQL das Gleiche wie bei MariaDB: Der einfachste Weg, ohne die Datenbank auszuschalten, führt über docker exec
docker exec postgres - db -1 pg_dump --username = postgres \ geonames > geonames_ b a ck u p
- sql
Hier möchten wir Ihnen noch eine weitere Möglichkeit zeigen, mit docker compose komfortabel Backups anzulegen
- Dazu erstellen Sie zusätzlich zu der bestehenden compose.yaml eine weitere Konfigurationsdatei
- Wir werden sie compose-backup.yaml nennen
- Datei : db / postgresq l / compose -backup
- yaml services
backup image : postgres :15 - alpine depends_ o n - db volumes - backup_v o l :/ backup command : > pg_dump --host db -F c -f / backup / geonames .dump --username = postgres geonames environm e nt PGPASSWOR D : geheim volumes backup_v o l
In dieser Datei befindet sich nur der backup-Service
- Dieser verwendet das aktuelle
PostgreSQL-Image und zeigt mit der depends_on -Anweisung an, dass der Datenbankserver auch gestartet sein muss
- Als Kommando für den backup-Service soll nicht die
PostgreSQL-Datenbank gestartet werden, sondern pg_dump (hier in der mehrzeiligen YAML-Schreibweise) Die Backup-Datei wird in /backup/geonames.dump gespeichert
- In diesem Fall ist das ein von Docker verwaltetes Volume, Sie können hier natürlich auch ein lokales Verzeichnis Ihres Computers einbinden
- Das pg_dump -Kommando liest aus der Umgebungsvariablen PGPASSWORD das Datenbankpasswort aus, das im environment -Abschnitt definiert ist
Der Trick bei diesem Setup ist, dass docker compose mit beiden Konfigurationsdateien und der run-Anweisung für den backup-Service aufgerufen wird
docker compose -f compose
- yaml \
-f compose - backup
- yaml run --rm backup
Damit starten Sie einen Container, der den backup-Service ausführt und mithilfe des pg_dump-Kommandos die Sicherung nach /backup speichert
- Im Anschluss wird der
Container wieder gelöscht (--rm), das Volume bleibt mit dem Backup erhalten