sql >> Database teknologi >  >> RDS >> PostgreSQL

docker compose:postgresql opret db, brugerpas og giv tilladelse

Ud fra kommentarerne vil jeg forsøge at svare her.

Jeg mener, at du bør gå med postgres 11-alpine billede. Og jeg vil prøve at forklare hvorfor her.

Officielle docker-billeder har en række fordele, som du altid bør overveje, før du starter dit eget.

  1. Opgraderingsstien er nem - når en ny revision af applikationen pakket i billedet frigives, vil det officielle docker-billede i de fleste tilfælde blive opdateret sammen med det. Og normalt respekterer ændringerne de konfigurationskonventioner, som billedet har etableret. Såsom miljøvariabler, opstartsspecifikationer. Så brugere nemt kan ændre tagget i deres stakke og opgradere. Der kan selvfølgelig være brudændringer - tjek altid dette.
  2. Stor brugerbase - når billeder som postgres er blevet downloadet mere end 10 millioner gange (2019), betyder det ikke kun, at det er populært, men fungerer i sagens natur som en garanti for, at billedet er blevet testet grundigt. Alle elementære fejl er allerede blevet luget ud, og du vil have det nemt med billedet.
  3. Optimeret til størrelse og ydeevne - du kan være sikker på, at der er lagt vægt på en masse detaljer, hvilket minimerer billedets størrelse og maksimerer ydeevnen. Mange projekter udgiver deres applikationer på et par forskellige linux distros. Ligesom postgres - de udgiver debian og en alpine baseret billeder. alpine billedet er det mindre, mens debian er lidt større, men giver dig adgang til de store debian-pakkedepoter, hvis du har brug for ekstra pakker installeret.
  4. Nem konfiguration - Vedligeholdere af de officielle billeder forstår normalt, at deres brugerbase bruger meget godt. Og de forsøger at gøre vores liv som udviklere og administratorer nemmere (gud velsigne dem). Officielle billeder har normalt ret god dokumentation lige på deres docker-hub-landingsside, eller et link til en github-repo, hvor README.md vil dække almindelige usecases. Jeg synes, at disse instruktioner er værd at læse fra top til bund.

Jeg kan godt forstå, at du vil holde billedet lille, men hvad ved du - postgres-projektet har dækket dit brugsområde.

Det seneste alpine postgres-billede tagget 11-alpine har et komprimeret fodaftryk på 28 MB og dekomprimeret på 70 MB . Mens archlinux/base billede, som du vil starte med, har et komprimeret basisfodaftryk på 153 MB og en dekomprimeret størrelse på 445 MB . Og det er før du introducerer selve postgres.

Læg dertil, at databasen og brugeren, som du ønsker oprettet ved opstart - kan håndteres i miljøvariablerne alene for det officielle postgres-billede. Sådan:

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

Hvis det ikke dækker den initialisering, du har brug for til din database, så kan du kopiere .sql scripts (og .sh scripts) til en speciel placering i billedet - og de vil blive udført ved opstart. Til dette kan du udvide deres image sådan her:

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

Og så med en Dockerfile sådan her:

Dockerfile

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

(Dette er taget fra postgres-beskrivelsen på docker hub )

Afslutningsvis vil jeg anbefale, at du ikke prioriterer den distro, som et billede er baseret på, frem for brugervenligheden og vedligeholdelsesvenligheden. Docker gør det muligt for os at køre applikationer i containere uden egentlig at bekymre os for meget om, hvilken distro der er inde i containeren. Det hele er alligevel linux. I slutningen af ​​dagen forventer jeg, at du vil have en stabil postgres-databasecontainer som mig. Dette er, hvad jeg får med det officielle postgres-billede.

Jeg håber, jeg har hjulpet dig med at vurdere dine muligheder på dette område.




  1. MySQL Sammenlign databaser

  2. Hvordan kan jeg kalde en SQL Stored Procedure ved hjælp af EntityFramework 7 og Asp.Net 5

  3. Knee-Jerk PerfMon tællere:Sidelevetid

  4. radiussøgning efter breddegrad/længdegrad