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

docker compose:postgresql crea db, pass utente e concede l'autorizzazione

Sulla base dei commenti, cercherò di rispondere qui.

Credo che dovresti andare con l'immagine postgres 11-alpine. E cercherò di spiegare perché qui.

Le immagini docker ufficiali presentano una serie di vantaggi che dovresti sempre considerare prima di iniziare la tua.

  1. Il percorso di aggiornamento è facile - quando viene rilasciata una nuova revisione dell'applicazione racchiusa nell'immagine, nella maggior parte dei casi l'immagine della finestra mobile ufficiale verrà aggiornata insieme ad essa. E di solito le modifiche rispettano le convenzioni di configurazione che l'immagine ha stabilito. Come variabili di ambiente, specifiche di avvio. In modo che gli utenti possano modificare facilmente il tag nei loro stack e aggiornare. Ovviamente potrebbero esserci modifiche sostanziali:controlla sempre questo.
  2. Ampia base di utenti - quando immagini come Postgres sono state scaricate più di 10 milioni di volte (2019), ciò non significa solo che è popolare, ma funziona intrinsecamente come una garanzia che l'immagine sia stata testata a fondo. Eventuali bug elementari sono già stati eliminati e ti divertirai con l'immagine.
  3. Ottimizzato per dimensioni e prestazioni - puoi star certo che l'attenzione è stata prestata a molti dettagli, riducendo al minimo le dimensioni dell'immagine e massimizzando le prestazioni. Molti progetti pubblicano le loro applicazioni su alcune distribuzioni Linux diverse. Come Postgres, pubblicano debian e un alpine immagini basate. L'alpine l'immagine è quella più piccola, mentre debian è leggermente più grande, ma ti dà accesso ai vasti repository di pacchetti debian se hai bisogno di pacchetti aggiuntivi installati.
  4. Configurazione semplice - i manutentori delle immagini ufficiali di solito capiscono molto bene i casi d'uso della loro base di utenti. E cercano di semplificarci la vita come sviluppatori e amministratori (che Dio li benedica). Le immagini ufficiali di solito hanno una documentazione piuttosto buona che si trova direttamente sulla pagina di destinazione dell'hub Docker o un collegamento a un repository github in cui il README.md tratterà casi d'uso comuni. Trovo che queste istruzioni valgano una buona lettura da cima a fondo.

Capisco che vuoi mantenere l'immagine piccola, ma che ne sai:il progetto postgres ha coperto il tuo caso d'uso.

L'ultima immagine postgres alpina taggata 11-alpine ha un footprint compresso di 28 MB e decompresso di 70 MB . Mentre archlinux/base l'immagine con cui vuoi iniziare ha un footprint di base compresso di 153 MB e una dimensione decompressa di 445 MB . E questo prima che tu introduca lo stesso postgres.

Aggiungi a ciò che il database e l'utente che desideri creare all'avvio possono essere gestiti solo nelle variabili di ambiente per l'immagine postgres ufficiale. In questo modo:

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

Se ciò non copre l'inizializzazione di cui hai bisogno per il tuo database, puoi copiare .sql script (e .sh script) in una posizione speciale nell'immagine - e verranno eseguiti all'avvio. Per questo puoi estendere la loro immagine in questo modo:

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

E poi con un Dockerfile così:

Dockerfile

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

(Questo è tratto da la descrizione di postgres su Docker Hub )

In conclusione, ti consiglio di non dare la priorità alla distribuzione su cui si basa un'immagine rispetto all'usabilità e alla manutenibilità. Docker ci consente di eseguire applicazioni in contenitori senza preoccuparci troppo di quale distribuzione si trova all'interno del contenitore. Comunque è tutto Linux. Alla fine della giornata, mi aspetto che tu voglia un contenitore di database postgres stabile come me. Questo è ciò che ottengo con l'immagine ufficiale di Postgres.

Spero di averti aiutato a valutare le tue opzioni in merito.