PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

docker compose:postgresql DB erstellen, Benutzerpass und Berechtigung erteilen

Basierend auf den Kommentaren werde ich versuchen, hier zu antworten.

Ich glaube, Sie sollten sich für das Postgres 11-Alpine-Image entscheiden. Und ich werde versuchen, hier zu erklären, warum.

Offizielle Docker-Images bieten eine Reihe von Vorteilen, die Sie immer berücksichtigen sollten, bevor Sie Ihr eigenes starten.

  1. Upgrade-Pfad ist einfach - Wenn eine neue Version der Anwendung veröffentlicht wird, die in das Image eingeschlossen ist, wird das offizielle Docker-Image in den meisten Fällen zusammen mit ihr aktualisiert. Und normalerweise respektieren die Änderungen die Konfigurationskonventionen, die das Image festgelegt hat. Wie Umgebungsvariablen, Startup-Besonderheiten. Damit Benutzer das Tag in ihren Stacks einfach ändern und upgraden können. Es kann natürlich Breaking Changes geben - überprüfen Sie dies immer.
  2. Große Nutzerbasis - Wenn Bilder wie Postgres mehr als 10 Millionen Mal heruntergeladen wurden (2019), bedeutet dies nicht nur, dass sie beliebt sind, sondern funktioniert von Natur aus wie eine Garantie dafür, dass das Bild gründlich getestet wurde. Alle elementaren Fehler wurden bereits ausgemerzt, und Sie werden leichtes Spiel mit dem Image haben.
  3. Optimiert für Größe und Leistung - Sie können sicher sein, dass auf viele Details geachtet wurde, um die Bildgröße zu minimieren und die Leistung zu maximieren. Viele Projekte veröffentlichen ihre Anwendungen auf ein paar verschiedenen Linux-Distributionen. Wie Postgres – sie veröffentlichen debian und ein alpine basierte Bilder. Die alpine image ist das kleinere, während debian ist etwas größer, gibt Ihnen aber Zugriff auf die umfangreichen Debian-Paket-Repositories, wenn Sie zusätzliche Pakete installieren müssen.
  4. Einfache Konfiguration - Betreuer der offiziellen Images verstehen diese Anwendungsfälle ihrer Benutzerbasis normalerweise sehr gut. Und sie versuchen, unser Leben als Entwickler und Administratoren einfacher zu machen (Gott segne sie). Offizielle Images haben normalerweise eine ziemlich gute Dokumentation direkt auf ihrer Docker-Hub-Zielseite oder einen Link zu einem Github-Repo, in dem sich die README.md befindet wird allgemeine Anwendungsfälle abdecken. Ich finde, diese Anleitung ist es wert, von oben bis unten gelesen zu werden.

Ich verstehe, dass Sie das Bild klein halten möchten, aber was wissen Sie – das Postgres-Projekt hat Ihren Anwendungsfall abgedeckt.

Das neueste alpine Postgres-Image mit dem Tag 11-alpine hat einen komprimierten Speicherbedarf von 28 MB und dekomprimiert von 70 MB . Während die Datei archlinux/base Bild, mit dem Sie beginnen möchten, hat einen komprimierten Grundspeicherbedarf von 153 MB und eine dekomprimierte Größe von 445 MB . Und das ist, bevor Sie Postgres selbst vorstellen.

Hinzu kommt, dass die Datenbank und der Benutzer, die Sie beim Start erstellen möchten, allein in den Umgebungsvariablen für das offizielle Postgres-Image behandelt werden können. So:

docker run -d --name some-postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -e POSTGRES_USER=simha \
  -e POSTGRES_DB=btgapp \
postgres:11-alpine

Wenn die Initialisierung, die Sie für Ihre Datenbank benötigen, damit nicht abgedeckt ist, können Sie .sql kopieren Skripte (und .sh Skripte) an eine spezielle Stelle im Image - und sie werden beim Start ausgeführt. Dazu können Sie ihr Bild wie folgt erweitern:

init-user-db.sh

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
    CREATE USER simha;
    CREATE DATABASE btgapp;
    GRANT ALL PRIVILEGES ON DATABASE btgapp TO simha;
EOSQL

Und dann mit einem Dockerfile so:

Dockerfile

FROM postgres:11-alpine
COPY ./init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh

(Dies stammt aus der Postgres-Beschreibung auf dem Docker-Hub )

Abschließend würde ich empfehlen, dass Sie die Distribution, auf der ein Image basiert, nicht über die Benutzerfreundlichkeit und Wartbarkeit stellen. Docker ermöglicht es uns, Anwendungen in Containern auszuführen, ohne uns wirklich zu sehr darum zu kümmern, welche Distribution sich im Container befindet. Es ist sowieso alles Linux. Am Ende des Tages erwarte ich, dass Sie einen stabilen Postgres-Datenbankcontainer wie mich wollen. Das bekomme ich mit dem offiziellen Postgres-Image.

Ich hoffe, ich konnte Ihnen dabei helfen, Ihre diesbezüglichen Optionen zu bewerten.