sql >> Database >  >> RDS >> PostgreSQL

docker compose:postgresql db maken, gebruikerspas en toestemming verlenen

Op basis van de opmerkingen zal ik proberen hier te antwoorden.

Ik denk dat je moet gaan met de postgres 11-alpine afbeelding. En ik zal hier proberen uit te leggen waarom.

Officiële docker-afbeeldingen hebben een aantal voordelen die u altijd moet overwegen voordat u uw eigen afbeeldingen begint.

  1. Upgradepad is eenvoudig - wanneer een nieuwe revisie van de applicatie die in de afbeelding is verpakt, wordt vrijgegeven, wordt in de meeste gevallen ook de officiële docker-afbeelding bijgewerkt. En meestal respecteren de wijzigingen de configuratieconventies die de afbeelding heeft vastgesteld. Zoals omgevingsvariabelen, opstartspecificaties. Zodat gebruikers eenvoudig de tag in hun stapels kunnen wijzigen en upgraden. Er kunnen natuurlijk belangrijke wijzigingen zijn - controleer dit altijd.
  2. Groot gebruikersbestand - wanneer afbeeldingen zoals postgres meer dan 10 miljoen keer (2019) zijn gedownload, betekent dit niet alleen dat het populair is, maar werkt het ook als een garantie dat de afbeelding grondig is getest. Alle elementaire bugs zijn al verwijderd, en je zult een gemakkelijke tijd hebben met de afbeelding.
  3. Geoptimaliseerd voor grootte en prestaties - u kunt er zeker van zijn dat er aandacht is besteed aan veel details, het minimaliseren van de grootte van het beeld en het maximaliseren van de prestaties. Veel projecten publiceren hun applicaties op een paar verschillende Linux-distributies. Net als postgres - ze publiceren debian en een alpine gebaseerde afbeeldingen. De alpine afbeelding is de kleinere, terwijl de debian is iets groter, maar geeft u toegang tot de uitgebreide pakketbronnen van debian als u extra pakketten moet installeren.
  4. Eenvoudige configuratie - beheerders van de officiële afbeeldingen begrijpen dat usecases van hun gebruikersbestand meestal heel goed. En ze proberen ons leven als ontwikkelaars en beheerders gemakkelijker te maken (God zegene hen). Officiële afbeeldingen hebben meestal behoorlijk goede documentatie op de bestemmingspagina van hun docker-hub, of een link naar een github-repo waar de README.md zal betrekking hebben op veelvoorkomende toepassingen. Ik vind dat deze instructies de moeite waard zijn om van boven naar beneden goed te lezen.

Ik begrijp dat je de afbeelding klein wilt houden, maar wat weet je:het postgres-project heeft je usecase gedekt.

De laatste afbeelding van alpine postgres getagd met 11-alpine heeft een gecomprimeerde voetafdruk van 28 MB en gedecomprimeerd van 70 MB . Terwijl de archlinux/base afbeelding waarmee u wilt beginnen, heeft een gecomprimeerde basisvoetafdruk van 153 MB en een gedecomprimeerde grootte van 445MB . En dat is voordat je postgres zelf introduceert.

Voeg daar nog aan toe dat de database en gebruiker die u wilt maken bij het opstarten - alleen in de omgevingsvariabelen kunnen worden afgehandeld voor de officiële postgres-afbeelding. Zoals dit:

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

Als dat niet de initialisatie dekt die je nodig hebt voor je database, dan kun je .sql kopiëren. scripts (en .sh scripts) naar een speciale locatie in de afbeelding - en ze worden uitgevoerd bij het opstarten. Hiervoor kun je hun afbeelding als volgt uitbreiden:

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

En dan met een Dockerfile zoals dit:

Dockerfile

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

(Dit is overgenomen uit de postgres-beschrijving op docker-hub )

Tot slot - ik zou aanraden dat je geen prioriteit geeft aan de distro waarop een afbeelding is gebaseerd boven de bruikbaarheid en onderhoudbaarheid. Docker stelt ons in staat om applicaties in containers uit te voeren zonder ons echt te bekommeren om welke distro zich in de container bevindt. Het is toch allemaal Linux. Aan het eind van de dag verwacht ik dat je een stabiele postgres-databasecontainer wilt zoals ik. Dit krijg ik met de officiële postgres-afbeelding.

Ik hoop dat ik je geholpen heb om je opties hierin te evalueren.




  1. diff 2 grote databasetabellen

  2. MySQL:Hoe voorkom je dat een gebruiker zelfs maar ziet dat ik andere DB's heb en hoe je selecte toegang verleent tot één weergave op één DB?

  3. Lijst met alle externe sleutels PostgreSQL

  4. Wat betekent %% in PL/pgSQL?