Loading...

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

Jonas Scholz - Co-Founder von sliplane.ioJonas Scholz
9 min

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:

  1. Docker auf deinem Computer installiert. Du kannst es von der Docker-Website herunterladen.
  2. 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:

  1. 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
  1. 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:

  1. Sichere deine Daten:
docker exec -t postgres-container pg_dump -U myuser mydb > backup.sql
  1. Stoppe und entferne den alten Container:
docker stop postgres-container
docker rm postgres-container
  1. Lade das neuere PostgreSQL-Image herunter:
docker pull postgres:newer-version
  1. 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.

Willkommen in der Container-Cloud

Sliplane macht es einfach, Container in der Cloud zu deployen und bei Bedarf zu skalieren. Probier es jetzt aus!