PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

docker compose:postgresql buat db, pass pengguna dan berikan izin

Berdasarkan komentar, saya akan mencoba menjawab di sini.

Saya percaya bahwa Anda harus menggunakan gambar postgres 11-alpine. Dan saya akan mencoba menjelaskan alasannya di sini.

Gambar buruh pelabuhan resmi hadir dengan sejumlah manfaat yang harus selalu Anda pertimbangkan sebelum memulai sendiri.

  1. Jalur peningkatan itu mudah - ketika revisi baru dari aplikasi yang dibungkus dengan gambar dirilis, gambar buruh pelabuhan resmi dalam banyak kasus akan diperbarui bersamaan dengan itu. Dan biasanya perubahan menghormati konvensi konfigurasi yang telah ditetapkan oleh gambar. Seperti variabel lingkungan, spesifik startup. Sehingga pengguna dapat dengan mudah mengubah tag di tumpukan mereka, dan meningkatkan. Tentu saja mungkin ada perubahan yang mengganggu - selalu periksa ini.
  2. Basis pengguna yang besar - ketika gambar seperti postgres telah diunduh lebih dari 10 juta kali (2019), ini tidak hanya berarti populer, tetapi secara inheren berfungsi seperti jaminan bahwa gambar telah diuji secara menyeluruh. Setiap bug dasar telah disingkirkan, dan Anda akan memiliki waktu yang mudah dengan gambar.
  3. Dioptimalkan untuk ukuran dan performa - Anda dapat yakin bahwa perhatian telah diberikan pada banyak detail, meminimalkan ukuran gambar dan memaksimalkan kinerja. Banyak proyek mempublikasikan aplikasi mereka di beberapa distro linux yang berbeda. Seperti postgres - mereka menerbitkan debian dan alpine gambar berbasis. alpine gambar lebih kecil, sedangkan debian sedikit lebih besar, tetapi memberi Anda akses ke repositori paket debian yang luas jika Anda perlu menginstal paket tambahan.
  4. Konfigurasi mudah - pengelola gambar resmi biasanya memahami kasus penggunaan basis pengguna mereka dengan sangat baik. Dan mereka mencoba membuat hidup kita sebagai pengembang dan admin lebih mudah (Tuhan memberkati mereka). Gambar resmi biasanya memiliki beberapa dokumentasi yang cukup bagus di halaman arahan hub buruh pelabuhan mereka, atau tautan ke repo github tempat README.md akan mencakup kasus penggunaan umum. Menurut saya, petunjuk ini layak dibaca dari atas ke bawah.

Saya mengerti bahwa Anda ingin menjaga agar gambar tetap kecil, tetapi apa yang Anda ketahui - proyek postgres telah mencakup usecase Anda.

Gambar postgres alpine terbaru dengan tag 11-alpine memiliki jejak terkompresi 28 MB dan didekompresi sebesar 70MB . Sedangkan archlinux/base gambar yang ingin Anda mulai memiliki tapak dasar terkompresi sebesar 153MB dan ukuran terdekompresi 445MB . Dan itu sebelum Anda memperkenalkan postgres itu sendiri.

Tambahkan ke itu, bahwa database dan pengguna yang ingin Anda buat saat startup - dapat ditangani dalam variabel lingkungan saja untuk gambar postgres resmi. Seperti ini:

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

Jika itu tidak mencakup inisialisasi yang Anda butuhkan untuk database Anda, maka Anda dapat menyalin .sql skrip (dan .sh scripts) ke lokasi khusus dalam gambar - dan mereka akan dieksekusi saat startup. Untuk ini, Anda dapat memperluas gambar mereka seperti ini:

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

Dan kemudian dengan Dockerfile seperti ini:

Dockerfile

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

(Ini diambil dari deskripsi postgres di hub docker )

Sebagai penutup - saya akan merekomendasikan agar Anda tidak memprioritaskan distro yang menjadi dasar gambar daripada kegunaan dan pemeliharaan. Docker memungkinkan kita untuk menjalankan aplikasi dalam container tanpa terlalu mempedulikan distro apa yang ada di dalam container. Lagipula itu semua linux. Pada akhirnya, saya berharap Anda menginginkan wadah database postgres yang stabil seperti saya. Inilah yang saya dapatkan dengan gambar postgres resmi.

Saya harap saya membantu Anda mengevaluasi pilihan Anda dalam hal ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nonaktifkan pembungkus dalam output Psql

  2. Fungsi refactor sehingga dapat digunakan dalam CTE

  3. Kesalahan sintaks dalam kode uji UPSERT

  4. PHP Terhubung ke PostgreSQL menggunakan ssh2_tunnel

  5. Migrasi ActiveRecord tidak mengisi tampilan terwujud Postgres