Zum Hauptinhalt springen

# Ausführen von PostgreSQL in einem Docker-Container

DevOps Postgres Docker Database
Autor
Harpal Singh
Software Engineer
Übersetzt von
Namastecode
Inhaltsverzeichnis

1. Einführung

In diesem Tutorial lernen wir, wie man PostgreSQL in einem Docker-Container ausführt. Diese Technik erleichtert die Einrichtung von Postgres. Daher ist sie eine ideale Lösung für Entwicklungs- und Testumgebungen.

Lass uns beginnen.

2. Voraussetzungen

Zuerst stellen wir sicher, dass Docker auf unserem Rechner installiert und ausgeführt wird. Falls nicht, folgen wir dem offiziellen Docker-Installationsleitfaden, um es einzurichten.

Als nächstes ziehen wir das PostgreSQL-Docker-Image von Docker Hub:

docker pull postgres:latest

Dieser Befehl holt die neueste Version des PostgreSQL-Images. Alternativ können wir eine spezifische Version angeben, indem wir latest durch den gewünschten Tag ersetzen (z.B. 13.2). Alle verfügbaren Tags finden wir auf der PostgreSQL Docker Hub-Seite.

3. Einen PostgreSQL-Container starten

Um einen PostgreSQL-Container zu starten, führen wir den folgenden Befehl aus:

docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

Lassen Sie uns diesen Befehl aufschlüsseln:

  • –name my-postgres: Weist dem Container einen Namen zu.
  • -e POSTGRES_PASSWORD=mysecretpassword: Legt das Passwort für den Standardbenutzer postgres fest.
  • -d: Führt den Container im Hintergrundmodus aus, was bedeutet, dass der Container im Hintergrund startet.
  • postgres: Gibt das zu verwendende Docker-Image an. In diesem Fall verwenden wir die neueste Version.

4. Zugriff auf die PostgreSQL-Instanz

Nun sollten wir eine Instanz von PostgreSQL in einem Container namens my-postgres haben. Daher können wir den psql-Befehl nicht direkt von unserem Terminal aus verwenden, da dieser nicht verfügbar ist. Stattdessen können wir den docker exec-Befehl nutzen, um auf die PostgreSQL-Instanz innerhalb des Containers zuzugreifen:

docker exec -it my-postgres psql -U postgres

Jetzt sollten wir eine Shell haben, die wir verwenden können, um mit der Datenbank zu interagieren. Normalerweise greifen wir nicht direkt auf die Datenbank zu. Aber im Moment ist es der einzige Weg, um auf die Datenbank zuzugreifen.

Lassen Sie uns den Container so konfigurieren, dass er die Datenbank für den Host zugänglich macht.

5. Konfigurieren des PostgreSQL-Containers

Um von der Hostmaschine aus eine Verbindung herzustellen, müssen wir den Container so konfigurieren, dass er den Datenbankport freigibt. Dazu können wir die Option –publish oder -p verwenden, um den Port des Containers auf einen Hostport zuzuordnen:

docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres

Nun haben wir Zugriff auf die Datenbank von der Hostmaschine, wenn wir uns mit localhost:5432 verbinden. Zusätzlich haben wir das Passwort für den postgres-Benutzer festgelegt, sodass wir einen Datenbank-Client wie DBeaver verwenden können, um eine Verbindung zur Datenbank herzustellen.

Sich an diese Befehle zu erinnern, kann schwierig sein. Stattdessen könnten wir eine docker-compose.yml-Datei verwenden, um unseren Container zu definieren. Auf diese Weise können wir die Konfiguration auch mit unserem Team teilen.

Lassen Sie uns den aktuellen Container stoppen und löschen:

docker stop my-postgres
docker rm my-postgres

Nun können wir unsere docker-compose.yml-Datei erstellen.

6. Verwendung von Docker Compose

Ein docker-compose ist einfach eine Dateibeschreibung der Container, die wir im YAML-Format ausführen möchten.
Lassen Sie uns eine docker-compose.yml-Datei für den Postgresql-Container erstellen:

version: '3.1'

services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    ports:
      - 5432:5432

Oben definieren wir einen Service namens db mit ähnlichen Konfigurationen wie zuvor. Das Einzige, was hier neu ist, ist die Restart-Option. Kurz gesagt, wir sagen Docker, dass es den Container immer neu starten soll, wenn er stoppt, zum Beispiel aufgrund eines Fehlers oder eines Systemneustarts.

Lassen wir den Container mit dem Befehl docker-compose aus dem gleichen Verzeichnis, in dem wir diese Datei gespeichert haben, laufen:

docker-compose up -d

Erneut verwenden wir die Option -d, um den Container im Detached-Modus auszuführen.

Um den Container zu stoppen und zu entfernen, können wir den Befehl docker-compose down verwenden:

docker-compose down

Nun wissen wir, wie wir mit Docker ganz einfach eine lokale Datenbank erstellen können. Aber denken wir daran, dies ist nicht für den Produktionseinsatz geeignet. Wir müssen andere Dinge für unsere Produktionsumgebung in Betracht ziehen.

Wenn wir die Möglichkeit haben, sollten wir uns für einen verwalteten Datenbankdienst entscheiden—zum Beispiel Amazon RDS, Google Cloud SQL oder Azure Database for PostgreSQL.

7. Persistieren der PostgreSQL-Containerdaten

Mit der aktuellen Einrichtung verlieren wir, wenn wir den PostgreSQL-Container entfernen, auch die darin enthaltenen Daten. Um Daten zu persistieren, können wir einen lokalen Ordner an den Container mit der –volume oder -v Option mounten. Zum Beispiel:

docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -v /path/to/local/folder:/var/lib/postgresql/data -d postgres

Kurz gesagt, PostgreSQL-Daten werden den Ordner path/to/local/folder für ihre Inhalte verwenden. Wenn wir also den Container entfernen und mit demselben Volume neu erstellen, werden die Daten weiterhin vorhanden sein.

8. Fazit

In diesem Tutorial haben wir gelernt, wie man PostgreSQL in einem Docker-Container ausführt und konfiguriert. Zuerst zeigten wir einen schnellen Befehl, um eine laufende Instanz der Datenbank zu erstellen. Dann nutzten wir eine docker-compose.yml-Datei, um den Container zu definieren. Schließlich besprachen wir, wie wir die Daten durch das Einbinden eines lokalen Ordners in den Container persistent speichern können.