Erstellen Sie einen Datenbankbenutzer mit Docker Postgres
- Erstellen Sie ein neues Projekt
- Definieren Sie DDL für den Benutzer und die Datenbank
- Definieren Sie eine Dockerfile für das Image
- Erstellen Sie ein Bild
- Führen Sie einen Container aus
- Verbinden Sie sich mit dem Container
- Melden Sie sich bei PostgreSQL an
- Erstellen Sie eine Benutzerdatenbank ohne Skriptdatei
- Abschluss
Bei der Entwicklung von Anwendungen verwenden wir normalerweise Datenbankverwaltungssysteme wie PostgreSQL, MySQL, MongoDB und andere, um die Daten der Anwendungen aufzuzeichnen.
Docker hilft uns, eine Instanz dieser Anwendungsdatenbankverwaltungssysteme auszuführen. Dies spart Zeit und Computerspeicher, da auf dem Computer kein DBMS benötigt wird.
Jede aus diesen DBMS erstellte Datenbank hat Benutzer mit unterschiedlichen Berechtigungen für die Datenbank. In diesem Tutorial lernen wir die verschiedenen Ansätze zum Erstellen eines Datenbankbenutzers mit Docker Postgres kennen.
Erstellen Sie ein neues Projekt
Für dieses Tutorial verwenden wir die WebStorm IDE, können aber auch jede beliebige Entwicklungsumgebung verwenden. Öffnen Sie die WebStorm IDE und wählen Sie Datei
> Neu
> Projekt
, um ein neues Projekt zu erstellen.
Wählen Sie die Option Leeres Projekt
und ändern Sie im sich öffnenden Fenster den Projektnamen von unbenannt
in initdb.d
oder verwenden Sie einen beliebigen Namen.
Definieren Sie DDL für den Benutzer und die Datenbank
Um unserem benutzerdefinierten Image mithilfe eines PostgreSQL-Basisimages eine zusätzliche Initialisierung hinzuzufügen, müssen wir *.sql
, *.sql.gz
oder *.sh
im Ordner /docker-entrypoint-initdb.d
hinzufügen.
Da wir eine SQL-Abfrage erstellen wollen, definieren wir unsere Abfrage anhand der Datei mit der Endung .sql
. Erstellen Sie eine Datei namens db-config.sql
unter dem aktuellen Ordner in unserem Projekt und kopieren Sie die folgenden SQL-Anweisungen und fügen Sie sie in die Datei ein.
CREATE USER doe;
CREATE DATABASE employee_database;
GRANT ALL PRIVILEGES ON DATABASE employee_database TO doe;
Die db-config.sql
wird ausgeführt, nachdem der Einstiegspunkt initdb
aufruft, um den standardmäßigen Postgres
-Benutzer und die Datenbank zu erstellen.
Beachten Sie, dass die Skripte in /docker-entrypoint-initdb.d
nur ausgeführt werden, wenn das Datenverzeichnis leer ist. Dies bedeutet, dass während des Startvorgangs eine zuvor ausgeführte Datenbank nicht geändert wird.
Definieren Sie eine Dockerfile für das Image
Erstellen Sie eine Datei namens Dockerfile
unter dem aktuellen Ordner und kopieren Sie die folgenden Anweisungen und fügen Sie sie in die Datei ein.
FROM postgres:15.1-alpine
COPY db-config.sql /docker-entrypoint-initdb.d/
“VON” - Definiert das Basisbild, auf dem ein benutzerdefiniertes Bild mit den nachfolgenden Anweisungen erstellt werden soll. In diesem Fall haben wir alpine
verwendet, was uns hilft, den Speicher zu optimieren, da es sich um eine leichtgewichtige Version von PostgreSQL handelt.
KOPIEREN
- Kopiert Dateien und Ordner vom Host in das Bilddateisystem. In diesem Fall haben wir die Datei db-config.sql
in den Ordner /docker-entrypoint-initdb.d/
kopiert.
Erstellen Sie ein Bild
Öffnen Sie ein neues Terminalfenster mit der Tastenkombination ALTF12 auf Ihrer Tastatur und verwenden Sie den folgenden Befehl, um ein Image mit dem Tag postgres-image
zu erstellen.
~/WebstormProjects/initdb.d$ docker build --tag postgres-image:latest .
Ausgang:
=> [1/2] FROM docker.io/library/postgres:15.1-alpine@sha256:cc663286e63810373bdfc91a5ed24b772447fb5282d 0.0s
=> CACHED [2/2] COPY db-config.sql /docker-entrypoint-initdb.d/ 0.0s
=> exporting to image 0.4s
=> => exporting layers 0.0s
=> => writing image sha256:fd33d80c880452dcb25de1d8f7d6415eeb874039bdab176cc3d3fe1c910ebcbc 0.1s
=> => naming to docker.io/library/postgres-image:latest
Führen Sie einen Container aus
Verwenden Sie im selben Terminalfenster den folgenden Befehl, um einen PostgreSQL-Container mit dem Namen postgres-container
auszuführen.
~/WebstormProjects/initdb.d$ docker run --name postgres-container -e POSTGRES_PASSWORD=postgres -d postgres-image
Ausgang:
3b8e0f85c2b4ef4b1aa28e2bad169ae796751331580af6fbba251a1c05aa4fca
Beachten Sie, dass wir im Befehl run
eine Umgebungsvariable namens POSTGRES_PASSWORD
verwendet haben. Beim Ausführen von PostgreSQL können wir mehrere Umgebungsvariablen übergeben, um Superuser-Details bereitzustellen, einschließlich der Datenbank und des Benutzernamens.
Die Umgebungsvariable POSTGRES_PASSWORD
ist eine erforderliche
Variable, die das Superuser-Passwort bereitstellt. Das Standardpasswort für PostgreSQL ist postgres
.
Andere Umgebungsvariablen, die übergeben werden können, sind optional
, zu denen unter anderem POSTGRES_USER
, POSTGRES_DB
und POSTGRES_INITDB_ARGS
gehören.
Da wir den Container im Detached-Modus betreiben, können wir die Ausführung der Datei db-config.sql
nicht sehen. Diese Datei wird jedoch vom Superuser im Hintergrund ausgeführt.
Verbinden Sie sich mit dem Container
Wir müssen uns über eine interaktive Shell mit dem Container verbinden, damit wir uns mit dem neuen Benutzer und der neuen Datenbank bei PostgreSQL anmelden können. Verwenden Sie dazu den folgenden Befehl, um eine Verbindung zum Container herzustellen.
~/WebstormProjects/initdb.d$ docker exec -it postgres-container bash
Ausgang:
bash-5.1#
Melden Sie sich bei PostgreSQL an
Sobald wir Zugriff auf die Container-Shell haben, verwenden Sie den folgenden Befehl, um sich bei der employee_database
als Benutzer doe
anzumelden.
bash-5.1# psql -d employee_database -U doe
Ausgang:
psql (15.1)
Type "help" for help.
employee_database=>
Erstellen Sie eine Benutzerdatenbank ohne Skriptdatei
Im vorherigen Abschnitt haben wir gelernt, wie man einen Datenbankbenutzer in Docker Postgres erstellt, indem man eine SQL mit der DDL zu /docker-entrypoint-initdb.d/
hinzufügt.
Es gibt einen einfacheren Ansatz, dies zu tun, ohne Skriptdateien zu schreiben. Dieser Ansatz verwendet die im vorherigen Abschnitt erwähnten Umgebungsvariablen, um die Details eines neuen Benutzers zu definieren.
Diese Umgebungsvariablen werden mit der Anweisung ENV
zum Dockerfile
hinzugefügt und stehen dem Container zur Verfügung. Um dies in Aktion zu sehen, ersetzen Sie die Anweisungen in der Dockerfile
durch die unten angegebenen Anweisungen.
FROM postgres:15.1-alpine
ENV POSTGRES_USER=doe
ENV POSTGRES_DB=employee_database
Wiederholen Sie nach dem Hinzufügen der Umgebungsvariablen alle in den vorherigen Abschnitten behandelten Schritte, vom Erstellen eines Images, Ausführen eines Containers, Verbinden mit dem Container und Anmelden bei PostgreSQL.
Verwenden Sie für alle Schritte denselben Befehl. Stellen Sie jedoch sicher, dass Sie anhalten und den vorhandenen Behälter entfernen.
Sie können auch ein neues Image und einen neuen Container erstellen.
Abschluss
In diesem Tutorial haben wir zwei Ansätze kennengelernt, mit denen wir einen Datenbankbenutzer mit Docker Postgres erstellen können. Beim ersten Ansatz wurde ein Benutzer erstellt, indem ein SQL-Skript zu /docker-entrypoint-initdb.d/
hinzugefügt wurde, und diese Datei wurde während der Initialisierung von initdb
ausgeführt.
Im zweiten Ansatz haben wir die Benutzerdetails in der Dockerfile
definiert, indem wir die Docker Postgres-Umgebungsvariablen genutzt haben.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub