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.