Wie man PostgreSQL in Docker ausführt: Ein Tutorial für Anfänger

Docker ermöglicht es dir, PostgreSQL zu nutzen, ohne es direkt auf deinem Computer zu installieren. Das bedeutet, dass du eine Datenbank in Sekunden starten, sie löschen kannst, wenn du fertig bist, und dir keine Sorgen über Konflikte mit anderer Software machen musst.
Dieses Tutorial führt dich durch die Einrichtung von PostgreSQL in einem Container, stellt sicher, dass deine Daten geschützt bleiben, und zeigt dir bewährte Methoden für die Verwendung von Datenbanken in Docker.
Voraussetzungen
Bevor du startest, brauchst du:
- Docker auf deinem Computer installiert. Du kannst es von der Docker-Website herunterladen.
- Grundkenntnisse in der Nutzung der Kommandozeile, um Befehle einzugeben.
PostgreSQL in Docker ausführen (Schnellstart)
Um PostgreSQL in einem Container zu starten, öffne dein Terminal und gib ein:
docker run --name postgres-container -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydb -p 5432:5432 -d postgres:latest
Schauen wir uns an, was jeder Teil bewirkt:
--name postgres-container
: Gibt deinem Container einen Namen, damit du ihn später leicht finden kannst-e POSTGRES_USER=myuser
: Erstellt einen Datenbankbenutzer namens "myuser"-e POSTGRES_PASSWORD=mypassword
: Legt das Passwort für diesen Benutzer fest-e POSTGRES_DB=mydb
: Erstellt eine Datenbank namens "mydb"-p 5432:5432
: Macht PostgreSQL auf Port 5432 auf deinem Computer verfügbar-d postgres:latest
: Verwendet das neueste PostgreSQL-Image und führt es im Hintergrund aus
Um zu prüfen, ob dein Container läuft, gib ein:
docker ps
Du solltest deinen postgres-container in der Liste sehen, was bedeutet, dass er funktioniert.
Verbindung zum PostgreSQL-Container herstellen
Mit Docker Exec (Kommandozeile)
Um dich direkt mit deiner Datenbank von der Kommandozeile aus zu verbinden:
docker exec -it postgres-container psql -U myuser -d mydb
Dies öffnet PostgreSQL's Kommandotool innerhalb des Containers. Probiere Folgendes, um zu prüfen, ob alles funktioniert:
SELECT version();
Du solltest die PostgreSQL-Versionsinformationen sehen. Zum Beenden gib \q
ein und drücke Enter.
Verwendung von psql von deinem Computer aus
Wenn du bereits PostgreSQL-Tools auf deinem Computer installiert hast, kannst du dich mit dem Container verbinden:
psql -h localhost -p 5432 -U myuser -d mydb
Wenn du danach gefragt wirst, gib das Passwort ein, das du vorher festgelegt hast (mypassword
).
Verbindung mit einem Datenbank-Tool
Du kannst auch Programme wie DBeaver, pgAdmin oder TablePlus verwenden, um dich mit deiner Datenbank zu verbinden. Verwende diese Einstellungen:
- Host:
localhost
- Port:
5432
- User:
myuser
- Password:
mypassword
- Database:
mydb
Persistenter Speicher: Daten nach dem Neustart behalten
Standardmäßig verschwinden alle Daten in der Datenbank, wenn du deinen Docker-Container stoppst oder entfernst. Um das zu beheben, müssen wir ein Docker-Volume verwenden, um Daten außerhalb des Containers zu speichern.
docker run --name postgres-container -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydb -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres:latest
Der neue Teil -v pgdata:/var/lib/postgresql/data
erstellt einen Speicherbereich namens "pgdata", der außerhalb des Containers existiert. Jetzt bleiben deine Daten sicher, auch wenn der Container stoppt.
PostgreSQL mit Docker Compose ausführen
Docker Compose hilft dir, Container mithilfe einer Konfigurationsdatei anstatt langer Befehle einzurichten. Das macht es einfacher, deine Datenbank mit den gleichen Einstellungen neu zu starten.
Erstelle eine Datei namens docker-compose.yml
mit diesem Inhalt:
version: '3.8'
services:
postgres:
image: postgres:latest
container_name: postgres-container
restart: always
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Starte PostgreSQL mit dieser Datei durch:
docker-compose up -d
Um es zu stoppen, führe aus:
docker-compose down
Dieser Ansatz ist viel übersichtlicher als jedes Mal den vollständigen docker run-Befehl einzugeben.
Best Practices für PostgreSQL in Docker
Sicherheit
Bei der Verwendung von PostgreSQL in Docker:
- Erlaube keinen direkten Zugriff aus dem Internet - nutze eine Firewall oder Netzwerkregeln
- Wähle starke Passwörter, besonders in Production-Umgebungen
- Erstelle verschiedene Datenbankbenutzer für verschiedene Anwendungen, anstatt einen Account zu teilen
Performance-Tuning
Docker-Container haben Beschränkungen für Speicher und CPU. Du kannst PostgreSQL-Einstellungen für bessere Leistung anpassen:
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
POSTGRES_INITDB_ARGS: "--data-checksums"
POSTGRES_HOST_AUTH_METHOD: "md5"
POSTGRES_SHARED_BUFFERS: "256MB"
POSTGRES_WORK_MEM: "16MB"
Diese Einstellungen helfen PostgreSQL, Ressourcen innerhalb des Containers klüger zu nutzen.
Automatische Backups
Erstelle ein Backup deiner Datenbank mit:
docker exec -t postgres-container pg_dump -U myuser mydb > backup.sql
Dies speichert den gesamten Inhalt deiner Datenbank in einer Datei namens backup.sql
auf deinem Computer.
PostgreSQL einfach deployen: Mit Sliplane
Das lokale Ausführen von PostgreSQL ist nützlich für die Entwicklung, aber wenn du es für echte Anwendungen nutzen willst, möchtest du vielleicht einen verwalteten Dienst wie Sliplane verwenden.
Sliplane übernimmt die schwierigen Teile des Betriebs von Docker-Containern wie:
- Einrichtung von Speicher, der keine Daten verliert
- Korrekte Konfiguration des Netzwerks
- Sicherstellen, dass die Datenbank läuft, auch wenn etwas abstürzt
- Erstellen automatischer Backups
- Sicherstellen, dass deine Datenbank den Traffic bewältigen kann, den sie erhält
Mit Sliplane kannst du denselben PostgreSQL-Container, mit dem wir gearbeitet haben, deployen, ohne dir über die technischen Details Gedanken machen zu müssen, um ihn ordnungsgemäß am Laufen zu halten.
Häufig gestellte Fragen
Kann ich mehrere PostgreSQL-Container gleichzeitig ausführen?
Ja, du kannst mehrere PostgreSQL-Container gleichzeitig betreiben. Achte nur darauf:
- Für jeden Container einen anderen Namen zu verwenden
- Jeden Container auf unterschiedliche Ports deines Computers zu mappen (z.B. 5432, 5433, 5434)
- Separate Volume-Namen zu verwenden, wenn du separate Datenspeicher möchtest
Beispiel für einen zweiten PostgreSQL-Container:
docker run --name postgres-container2 -e POSTGRES_USER=myuser2 -e POSTGRES_PASSWORD=mypassword2 -e POSTGRES_DB=mydb2 -p 5433:5432 -v pgdata2:/var/lib/postgresql/data -d postgres:latest
Wie verbinde ich PostgreSQL mit anderen Docker-Containern?
Wenn du möchtest, dass dein Anwendungscontainer mit PostgreSQL kommuniziert, hast du zwei Möglichkeiten:
- Docker Compose-Netzwerke verwenden: Docker Compose erstellt automatisch ein Netzwerk für deine Container. Verwende einfach den Service-Namen:
version: '3.8'
services:
postgres:
image: postgres:latest
# PostgreSQL-Einstellungen...
myapp:
image: myapplication:latest
environment:
DATABASE_URL: "postgresql://myuser:mypassword@postgres:5432/mydb"
depends_on:
- postgres
- Docker-Netzwerke manuell verwenden: Erstelle ein Netzwerk und verbinde Container:
docker network create mynetwork
docker run --name postgres-container --network mynetwork [andere Optionen] postgres:latest
docker run --name myapp --network mynetwork [andere Optionen] myapplication:latest
Innerhalb des Anwendungscontainers würdest du dich mit postgres-container:5432
statt mit localhost:5432
verbinden.
Wie aktualisiere ich meinen PostgreSQL-Container auf eine neuere Version?
Um PostgreSQL zu aktualisieren, folge diesen Schritten:
- Sichere deine Daten:
docker exec -t postgres-container pg_dump -U myuser mydb > backup.sql
- Stoppe und entferne den alten Container:
docker stop postgres-container
docker rm postgres-container
- Lade das neuere PostgreSQL-Image herunter:
docker pull postgres:newer-version
- Starte einen neuen Container mit demselben Volume:
docker run --name postgres-container -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydb -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres:newer-version
Das Volume (pgdata
) enthält deine Datenbankdateien, daher bleiben deine Daten erhalten. PostgreSQL handhabt Versions-Upgrades automatisch beim Start.
Was ist der Unterschied zwischen einem Volume und einem Bind Mount?
- Volume (
-v pgdata:/var/lib/postgresql/data
): Docker verwaltet den Speicherort auf deiner Festplatte. Das ist einfacher und plattformübergreifend kompatibel. - Bind Mount (
-v /pfad/auf/deinem/computer:/var/lib/postgresql/data
): Du gibst genau an, wo auf deinem Computer die Daten gespeichert werden. Das ist nützlich, wenn du direkten Zugriff auf die Datenbankdateien benötigst.
Für die meisten Benutzer werden Volumes aufgrund ihrer Einfachheit und Kompatibilität empfohlen.
Zusammenfassung
Jetzt weißt du, wie du:
- PostgreSQL in Docker mit einem einzigen Befehl starten kannst
- Deine Daten mit Volumes sicher aufbewahrst
- Docker Compose für eine übersichtlichere Einrichtung nutzt
- Bewährte Methoden für Sicherheit und Backups befolgst
Docker macht PostgreSQL für die Entwicklung viel einfacher zu nutzen, und Dienste wie Sliplane können helfen, wenn du bereit bist, deine Datenbank in einer echten Anwendung einzusetzen.
Das Beste daran ist, dass du jederzeit eine neue Datenbank einrichten kannst, ohne etwas direkt auf deinem Computer zu installieren. Und wenn du fertig bist, kannst du sie vollständig mit docker rm postgres-container
entfernen.