PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

docker compose:postgresql create db, потребителски пропуск и предоставяне на разрешение

Въз основа на коментарите ще се опитам да отговоря тук.

Вярвам, че трябва да използвате изображението на postgres 11-alpine. И тук ще се опитам да обясня защо.

Официалните докер изображения идват с редица предимства, които винаги трябва да имате предвид, преди да започнете свой собствен.

  1. Пътят на надстройката е лесен - когато бъде пусната нова ревизия на приложението, обвито в изображението, официалният докер образ в повечето случаи ще бъде актуализиран заедно с него. И обикновено промените спазват конвенциите за конфигурация, които изображението е установило. Като променливи на средата, специфики при стартиране. Така че потребителите могат лесно да променят етикета в своите стекове и да надграждат. Разбира се, може да има критични промени - винаги проверявайте това.
  2. Голяма потребителска база - когато изображения като postgres са изтеглени повече от 10 милиона пъти (2019 г.), това не означава само, че е популярно, но по своята същност работи като гаранция, че изображението е щателно тествано. Всички елементарни грешки вече са отстранени и ще ви е лесно с изображението.
  3. Оптимизиран за размер и производителност - можете да сте сигурни, че е обърнато внимание на много детайли, минимизиране на размера на изображението и максимизиране на производителността. Много проекти публикуват приложенията си в няколко различни дистрибуции на Linux. Като postgres - те публикуват debian и alpine базирани изображения. alpine image е по-малкият, докато debian е малко по-голям, но ви дава достъп до огромните хранилища на пакети на debian, ако имате нужда от инсталиране на допълнителни пакети.
  4. Лесна конфигурация - поддържащите официални изображения обикновено разбират много добре тези случаи на използване на тяхната потребителска база. И те се опитват да направят живота ни като разработчици и администратори по-лесен (бог да ги благослови). Официалните изображения обикновено имат доста добра документация, намираща се точно на целевата им страница на докер хъб, или връзка към репо в github, където README.md ще обхваща общи случаи на употреба. Смятам, че тези инструкции си заслужават доброто четене отгоре надолу.

Разбирам, че искате да запазите изображението малко, но какво знаете - проектът postgres е покрил вашия случай на използване.

Най-новото alpine postgres изображение с етикет 11-alpine има компресиран отпечатък от 28 MB и декомпресиран от 70MB . Докато archlinux/base изображението, с което искате да започнете, има компресиран основен отпечатък от 153MB и декомпресиран размер от 445MB . И това е преди да представите самия postgres.

Добавете към това, че базата данни и потребителят, които искате да бъдат създадени при стартиране, могат да се обработват само в променливите на средата за официалното изображение на postgres. Като това:

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

Ако това не покрива инициализацията, от която се нуждаете за вашата база данни, тогава можете да копирате .sql скриптове (и .sh скриптове) в специално място в изображението - и те ще бъдат изпълнени при стартиране. За целта можете да разширите изображението им по следния начин:

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

И след това с Dockerfile като това:

Dockerfile

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

(Това е взето от описанието на postgres в docker hub )

В заключение - бих препоръчал да не давате приоритет на дистрибуцията, на която се основава изображението, пред използваемостта и поддръжката. Docker ни позволява да изпълняваме приложения в контейнери, без наистина да се интересуваме много от това какво е дистрибуцията вътре в контейнера. И без това всичко е линукс. В края на деня очаквам, че искате стабилен контейнер за база данни postgres като мен. Това е, което получавам с официалното изображение на postgres.

Надявам се, че съм ви помогнал да оцените възможностите си по този въпрос.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - ФАТАЛНО:файловете на базата данни са несъвместими със сървъра

  2. python json dumps поставя обект в обект при връщане на row_to_json

  3. премахване на нецифрови знаци в колона (променлив знак), postgresql (9.3.5)

  4. Множество синонимни речникови съвпадения при търсене в пълен текст

  5. Хибернация и postgreSQL с Grails