PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

docker compose:postgresql utwórz bazę danych, przekaż użytkownika i nadaj uprawnienia

Na podstawie komentarzy postaram się odpowiedzieć tutaj.

Uważam, że warto wybrać postgres 11-alpine image. I postaram się wyjaśnić, dlaczego tutaj.

Oficjalne obrazy dokowane mają wiele zalet, które należy zawsze rozważyć przed rozpoczęciem tworzenia własnych.

  1. Ścieżka aktualizacji jest łatwa - po wydaniu nowej wersji aplikacji umieszczonej w obrazie, wraz z nią zostanie w większości przypadków zaktualizowany oficjalny obraz dokowany. I zwykle zmiany są zgodne z konwencjami konfiguracji ustanowionymi przez obraz. Takie jak zmienne środowiskowe, specyfika uruchamiania. Dzięki temu użytkownicy mogą łatwo zmieniać tag w swoich stosach i aktualizować. Oczywiście mogą nastąpić przełomowe zmiany - zawsze to sprawdź.
  2. Duża baza użytkowników - gdy obrazy takie jak postgres zostały pobrane ponad 10 milionów razy (2019), oznacza to nie tylko, że jest popularny, ale z natury działa jak gwarancja, że ​​obraz został dokładnie przetestowany. Wszelkie podstawowe błędy zostały już wyeliminowane i będziesz miał łatwy czas z obrazem.
  3. Zoptymalizowany pod kątem rozmiaru i wydajności - masz pewność, że zwrócono uwagę na wiele detali, minimalizując wielkość obrazu i maksymalizując wydajność. Wiele projektów publikuje swoje aplikacje na kilku różnych dystrybucjach linuxa. Podobnie jak postgres - publikują debian i alpine na podstawie obrazów. alpine image jest mniejszy, podczas gdy debian jest nieco większy, ale daje dostęp do obszernych repozytoriów pakietów Debiana, jeśli potrzebujesz zainstalować dodatkowe pakiety.
  4. Łatwa konfiguracja - opiekunowie oficjalnych obrazów zazwyczaj bardzo dobrze rozumieją przypadki użycia ich bazy użytkowników. I starają się ułatwić nam życie jako programistów i administratorów (niech Bóg ich błogosławi). Oficjalne obrazy zwykle mają całkiem niezłą dokumentację znajdującą się bezpośrednio na ich stronie docelowej w centrum docker lub link do repozytorium github, gdzie README.md obejmie typowe przypadki użycia. Uważam, że te instrukcje są warte dobrego przeczytania od góry do dołu.

Rozumiem, że chcesz, aby obraz był mały, ale co wiesz - projekt postgres obejmuje twoje zastosowanie.

Najnowszy obraz alpejskiego postgresu oznaczony tagiem 11-alpine ma skompresowaną powierzchnię 28 MB i zdekompresowane 70 MB . Podczas gdy archlinux/base obraz, od którego chcesz zacząć, ma skompresowany rozmiar podstawy 153 MB i zdekompresowany rozmiar 445 MB . I to jest zanim przedstawisz sam postgres.

Dodaj do tego, że baza danych i użytkownik, który chcesz utworzyć przy starcie - mogą być obsługiwane w samych zmiennych środowiskowych dla oficjalnego obrazu postgres. Tak:

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

Jeśli to nie obejmuje inicjalizacji, której potrzebujesz dla swojej bazy danych, możesz skopiować .sql skrypty (i .sh skrypty) do specjalnej lokalizacji w obrazie - i zostaną wykonane przy starcie. W tym celu możesz rozszerzyć ich obraz w ten sposób:

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 potem za pomocą Dockerfile tak:

Dockerfile

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

(Jest to zaczerpnięte z opisu postgresa w centrum dockera )

Na zakończenie - sugerowałbym, aby nie traktować priorytetowo dystrybucji, na której opiera się obraz, a nie użyteczności i konserwacji. Docker umożliwia nam uruchamianie aplikacji w kontenerach, nie przejmując się zbytnio tym, jaka dystrybucja znajduje się w kontenerze. W każdym razie to wszystko linux. Pod koniec dnia spodziewam się, że potrzebujesz stabilnego kontenera bazy danych postgres, takiego jak ja. Oto, co otrzymuję z oficjalnym obrazem postgres.

Mam nadzieję, że pomogłem Ci ocenić Twoje możliwości w tym zakresie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernacja i postgreSQL z Grails

  2. Kolumna funkcji okna Postgres z Rails

  3. Odwołaj się do aliasu nazwy kolumny w klauzuli WHERE

  4. Jaki jest właściwy indeks do odpytywania struktur w tablicach w jsonb Postgresa?

  5. psql BŁĄD:nie można otworzyć pliku adres.csv do odczytu:Brak takiego pliku lub katalogu