sql >> Databáze >  >> RDS >> PostgreSQL

docker compose:postgresql vytvořit db, uživatel předat a udělit oprávnění

Na základě komentářů se zde pokusím odpovědět.

Věřím, že byste měli jít s postgres 11-alpským obrazem. A zde se pokusím vysvětlit proč.

Oficiální obrázky dockerů přicházejí s řadou výhod, které byste měli vždy zvážit, než začnete své vlastní.

  1. Cesta upgradu je snadná - když je vydána nová revize aplikace zabalená do obrázku, oficiální obrázek dockeru bude ve většině případů aktualizován spolu s ní. A obvykle změny respektují konvence konfigurace, které obrázek zavedl. Jako jsou proměnné prostředí, specifika spouštění. Uživatelé tak mohou jednoduše změnit štítek ve svých hromádkách a upgradovat. Samozřejmě může dojít k převratným změnám – toto vždy zkontrolujte.
  2. Velká uživatelská základna - když byly obrázky jako postgres staženy více než 10 milionůkrát (2019), neznamená to jen, že jsou populární, ale ze své podstaty to funguje jako záruka, že obrázek byl důkladně otestován. Všechny základní chyby již byly odstraněny a s obrázkem to bude snadné.
  3. Optimalizováno pro velikost a výkon - můžete si být jisti, že byla věnována pozornost spoustě detailů, minimalizaci velikosti obrazu a maximalizaci výkonu. Mnoho projektů publikuje své aplikace na několika různých linuxových distribucích. Stejně jako postgres - publikují debian a alpine založené obrázky. alpine image je menší, zatímco debian je o něco větší, ale umožňuje vám přístup k rozsáhlým repozitářům balíčků debianu, pokud potřebujete nainstalovat další balíčky.
  4. Snadná konfigurace - správci oficiálních obrázků obvykle velmi dobře chápou případy použití jejich uživatelské základny. A snaží se nám jako vývojářům a správcům usnadnit život (bůh jim žehnej). Oficiální obrázky mají obvykle docela dobrou dokumentaci přímo na vstupní stránce docker hubu nebo odkaz na github repo, kde je README.md bude pokrývat běžné případy použití. Zjistil jsem, že tyto pokyny stojí za to si přečíst odshora dolů.

Chápu, že chcete, aby byl obrázek malý, ale co víte - projekt postgres má váš případ použití pokrytý.

Nejnovější obrázek alpine postgres s tagem 11-alpine má komprimovanou stopu 28 MB a dekomprimováno na 70 MB . Zatímco archlinux/base obrázek, se kterým chcete začít, má komprimovanou základní stopu 153 MB a dekomprimovaná velikost 445 MB . A to ještě předtím, než představíte samotný postgres.

Přidejte k tomu, že databáze a uživatel, které chcete vytvořit při spuštění - mohou být zpracovány pouze v proměnných prostředí pro oficiální postgres image. Takhle:

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

Pokud to nepokrývá inicializaci, kterou potřebujete pro svou databázi, můžete zkopírovat .sql skripty (a .sh skripty) do speciálního umístění v obrazu - a budou spuštěny při spuštění. Za tímto účelem můžete jejich obrázek rozšířit takto:

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

A poté pomocí Dockerfile takhle:

Dockerfile

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

(Toto je převzato z popisu postgres na docker centru )

Na závěr – doporučil bych, abyste neupřednostňovali distro, na kterém je obrázek založen, před použitelností a udržovatelností. Docker nám umožňuje spouštět aplikace v kontejnerech, aniž bychom se příliš starali o to, co je uvnitř kontejneru. Stejně je to všechno linux. Na konci dne očekávám, že chcete stabilní databázový kontejner postgres jako já. To je to, co dostanu s oficiálním postgresovým obrázkem.

Doufám, že jsem vám pomohl vyhodnotit vaše možnosti.




  1. Jak vytvořit fiktivní proměnné sloupce pro tisíce kategorií v Google BigQuery?

  2. SQL Počet pro zahrnutí nulových hodnot

  3. dotaz oracle - ORA-01652:nelze rozšířit dočasný segment, ale pouze v některých verzích sql*plus

  4. Nelze načíst třídu ovladače JDBC 'com.postgresql.jdbc.Driver'