GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menyebarkan PostgreSQL sebagai Wadah Docker

PostgreSQL, juga disebut sebagai Postgres, adalah sistem basis data relasional objek terkemuka. Ini populer karena tingkat kepatuhannya yang tinggi terhadap standar SQL dan penyertaan fitur tambahan yang menyederhanakan bekerja dengan kumpulan data kompleks dalam skala besar.

PostgreSQL menggunakan arsitektur client-server tradisional sehingga Anda perlu menjalankannya secara independen dari kode aplikasi Anda. Dalam panduan ini, Anda akan menerapkan instance server PostgreSQL sebagai wadah Docker. Ini menghindari penambahan paket ke mesin host Anda dan membantu mengisolasi database Anda dari bagian lain dari tumpukan Anda. Pastikan Anda telah menginstal Docker sebelum melanjutkan.

Memulai

PostgreSQL memiliki gambar resmi di Docker Hub yang tersedia dalam beberapa varian berbeda. Tag memungkinkan Anda memilih antara versi PostgreSQL utama dari v9 hingga v14 dan memilih sistem operasi yang digunakan sebagai gambar dasar. Alpine, Debian Stretch, dan Debian Bullseye ditawarkan.

Untuk keperluan tutorial ini, kita akan menggunakan postgres:14 tag yang menyediakan PostgreSQL 14 di atas Bullseye. Anda bebas memilih versi lain yang sesuai dengan kebutuhan Anda.

Mulai wadah PostgreSQL menggunakan docker run perintah:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    postgres:14

Anda harus berikan nilai untuk POSTGRES_PASSWORD variabel lingkungan. Ini mendefinisikan kata sandi yang akan diberikan ke akun pengguna super default Postgres. Nama pengguna default ke postgres tetapi dapat diubah dengan menyetel POSTGRES_USER variabel lingkungan.

-v flag digunakan untuk memasang volume Docker ke direktori data container PostgreSQL. Volume bernama bernama postgres dirujuk; Docker akan membuatnya atau memasang kembali volume jika sudah ada. Anda harus menggunakan volume untuk menyimpan database Anda di luar wadah. Tanpanya, Anda akan menggunakan data Anda saat penampung berhenti.

PostgreSQL mendengarkan pada port 5432 secara default. Port kontainer terikat ke port 5432 di host Docker Anda dengan -p bendera. -d flag digunakan untuk memulai wadah dalam mode terpisah, secara efektif menjadikannya layanan latar belakang yang terus berjalan hingga dihentikan dengan docker stop .

Menyediakan Kata Sandi sebagai File

Jika Anda tidak nyaman memberikan kata sandi pengguna super Anda sebagai tanda CLI teks biasa, Anda dapat menyuntikkannya sebagai file melalui volume sebagai gantinya. Anda kemudian harus mengatur POSTGRES_PASSWORD_FILE variabel lingkungan untuk memberikan Postgres jalur ke file itu:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD_FILE=/run/secrets/postgres-password 
    -v ./postgres-password.txt:/run/secrets/postgres-password
    -v postgres:/var/lib/postgresql/data 
    postgres:14

Teknik ini juga berfungsi untuk POSTGRES_USER dan variabel lingkungan lain yang didukung.

Menghubungkan ke Database Anda

Karena PostgreSQL terikat ke port 5432 di atas, Anda dapat terhubung ke database Anda di localhost:5432 dari klien yang kompatibel. Gunakan kredensial yang Anda tetapkan sebagai variabel lingkungan saat memulai penampung.

Gambar Docker juga menyertakan psql biner yang dapat Anda panggil dengan docker exec . Gunakan ini untuk berinteraksi dengan cepat dengan database Anda dari shell PostgreSQL di dalam wadah.

docker exec -it postgres psql -U postgres

Menghubungkan Dari Kontainer Docker Lain

Membuat jaringan Docker adalah cara yang lebih disukai untuk mengakses PostgreSQL dari wadah lain di host yang sama. Ini menghindari pengikatan port server Postgres dan berpotensi mengekspos layanan ke jaringan host Anda yang lebih luas.

Buat jaringan Docker:

docker network create my-app

Mulai wadah Postgres Anda dengan koneksi ke jaringan dengan menggunakan --network tandai dengan docker run :

docker run -d 
    --name postgres 
    --network my-app 
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    postgres:14

Sekarang gabungkan wadah aplikasi Anda ke jaringan yang sama:

docker run -d
    --name api
    --network my-app
    my-api:latest

Wadah dalam jaringan dapat mencapai Postgres menggunakan postgres hostname, karena ini adalah name ditugaskan ke wadah Postgres. Gunakan port 5432 untuk menyelesaikan koneksi.

Mengonfigurasi PostgreSQL

Anda dapat melewati opsi server PostgreSQL menggunakan -c tandai setelah nama gambar di docker run perintah:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    postgres:14 -c max_connections=100

Semuanya setelah nama gambar diteruskan ke perintah yang dimulai di wadah. Perintah ini akan menjadi biner server PostgreSQL dalam kasus gambar Postgres.

Anda dapat menggunakan file konfigurasi khusus saat Anda mengatur nilai dari beberapa opsi. Anda harus menggunakan volume Docker lain untuk memasang file Anda ke dalam wadah, lalu berikan satu -c tandai untuk menginstruksikan Postgres ke mana harus mencari:

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v ./postgres.conf:/etc/postgresql/postgresql.conf 
    -v postgres:/var/lib/postgresql/data 
    postgres:14 -c config_file=/etc/postgresql/postgresql.conf

Contoh ini menggunakan mount pengikat Docker untuk mendapatkan postgres.conf file di direktori kerja Anda di-mount ke /etc/postgresql penampung direktori. Untuk referensi opsi yang dapat Anda atur dengan flag biner atau arahan file konfigurasi, lihat dokumentasi PostgreSQL.

Seeding Database

Gambar Docker mendukung file benih yang ditempatkan ke dalam /docker-entrypoint-initdb.d direktori. .sql Any atau .sql.gz file akan dieksekusi untuk menginisialisasi database. Ini terjadi setelah akun pengguna default dan postgres basis data telah dibuat. Anda juga dapat menambahkan .sh file untuk menjalankan skrip shell arbitrer. Semua skrip dieksekusi dalam urutan abjad.

Mekanisme ini berarti semua yang Anda butuhkan untuk seed database Anda adalah satu set SQL atau skrip shell yang dinamai dalam urutan yang benar. Pasang ini ke wadah baru Anda menggunakan -v tandai dengan docker run :

docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v ./db-seed-files/:/etc/docker-entrypoint-initdb.d 
    -v postgres:/var/lib/postgresql/data 
    postgres:14

Skrip inisialisasi hanya akan digunakan ketika direktori data Postgres kosong. Untuk tujuan praktis, itu berarti mereka akan berjalan pertama kali wadah dimulai dengan volume kosong baru yang terpasang.

Membuat Gambar Database Khusus

Anda dapat memilih untuk mengenkapsulasi file konfigurasi dan skrip inisialisasi dalam gambar Docker Anda sendiri. Ini akan memungkinkan siapa pun yang memiliki akses ke gambar untuk membuat instance PostgreSQL baru yang telah dikonfigurasikan sebelumnya untuk aplikasi Anda. Berikut Dockerfile sederhana yang dapat Anda gunakan:

FROM postgres:14
COPY postgres.conf /etc/postgresql/postgresql.conf
COPY db-seed-files/ /etc/docker-entrypoint-initdb.d/
CMD ["-c", "config_file=/etc/postgresql/postgresql.conf"]

Buat gambar khusus Anda:

docker build -t custom-postgres:latest .

Instruksi build di Dockerfile akan menyalin file konfigurasi PostgreSQL dan skrip inisialisasi dari direktori kerja Anda dan menyematkannya ke dalam image container. Sekarang Anda dapat memulai wadah basis data tanpa menyediakan sumber daya secara manual:

docker run -d 
    --name custom-postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    custom-postgres:latest

Haruskah Anda Menampung Basis Data Produksi Anda?

Mungkin sulit untuk memutuskan apakah akan menjalankan database di Docker. Containerizing PostgreSQL membuat pengalaman penyiapan lebih mudah tetapi terkadang lebih menantang untuk dipelihara. Anda perlu berhati-hati saat mengelola wadah Anda untuk menghindari kehilangan data di masa mendatang. Docker juga menambahkan overhead kinerja sederhana yang patut dipertimbangkan ketika Anda mengantisipasi database tur akan bekerja dengan volume data yang sangat besar.

Manfaat Docker adalah peningkatan portabilitas, kemudahan penskalaan, dan efisiensi pengembang. Menampung database Anda memungkinkan siapa pun menjalankan instance baru menggunakan Docker, tanpa menginstal dan mengonfigurasi PostgreSQL secara manual terlebih dahulu. Oleh karena itu, menulis Dockerfile untuk database PostgreSQL Anda yang menambahkan file konfigurasi dan skrip benih SQL adalah cara yang baik untuk membantu pengembang memulai lingkungan baru dengan cepat.

Ringkasan

PostgreSQL adalah mesin database berbasis SQL canggih yang menambahkan kemampuan relasional objek. Meskipun Anda dapat memilih untuk menjalankan penerapan tradisional dalam produksi, menggunakan instance dalam container menyederhanakan penyiapan dan membantu pengembang dengan cepat menjalankan infrastruktur mereka sendiri.

Aspek paling penting dari penerapan Dockerized adalah memastikan Anda menggunakan volume untuk menyimpan data Anda. Ini akan memungkinkan Anda untuk menghentikan, mengganti, dan memperbarui penampung Anda ke versi gambar yang lebih baru tanpa kehilangan database Anda. Di luar penyimpanan, Anda harus menilai bagaimana Anda akan terhubung ke Postgres dan menghindari mengikat port ke host Anda kecuali diperlukan. Saat menghubungkan dari penampung lain, sebaiknya gunakan jaringan Docker bersama untuk memfasilitasi akses.


Docker
  1. Cara Menyebarkan Wadah nginx dengan Docker di Linode

  2. Cara Menjalankan MySQL Dalam Wadah Docker

  3. Cara SSH Ke Wadah Docker

  1. Cara menginstal WordPress menggunakan Docker

  2. Cara menginstal Docker dan menyebarkan LAMP Stack

  3. Cara Menginstal Vim di Wadah Docker

  1. Cara Menetapkan IP Statis ke Wadah Docker

  2. Cara Mendaftar Kontainer Docker

  3. Cara Keluar dari Kontainer Docker