Lewati ke konten utama

PostgreSQL di Docker: Panduan Langkah demi Langkah untuk Pemula

Panduan lengkap Anda untuk menjalankan PostgreSQL di Docker—mulai dari penyiapan hingga praktik terbaik—agar alur kerja pengembangan Anda lebih lancar tanpa repot.
Diperbarui 28 Sep 2026  · 15 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Menyiapkan lingkungan pengembangan PostgreSQL seharusnya tidak memakan waktu berjam-jam untuk konfigurasi dan pemecahan masalah—dan dengan Docker, memang tidak.

Docker menyediakan cara yang mudah untuk menjalankan PostgreSQL dalam hitungan menit, apa pun sistem operasi Anda. Hanya dengan beberapa perintah, Anda dapat membuat lingkungan database yang sepenuhnya berfungsi dan terisolasi dari sistem Anda, sehingga terhindar dari konflik dependensi dan kerumitan instalasi.

PostgreSQL di Docker memberi Anda kebebasan untuk bereksperimen tanpa takut merusak pengaturan lokal Anda. Anda dapat dengan mudah membuat, memodifikasi, atau menghapus instance database, menguji berbagai versi PostgreSQL, dan mengembalikan ke kondisi bersih kapan pun diperlukan.

Dalam panduan ini, saya akan memandu Anda melalui semua yang perlu Anda ketahui tentang menjalankan PostgreSQL di container Docker untuk pengalaman pengembangan yang mulus.

>Belum banyak pengalaman dengan PostgreSQL? Kursus pengantar untuk pemula kami siap membantu.

Mengapa Menggunakan PostgreSQL di Docker?

Sebelum Docker, menyiapkan database sering kali berarti mengikuti panduan instalasi yang panjang, menyelesaikan masalah khusus sistem, dan mengelola dependensi sistem dengan cermat. Docker sepenuhnya mengubah paradigma ini.

>Sebenarnya apa itu database PostgreSQL? Pelajari cara kerjanya, kasus penggunaan paling umum, dan sumber daya.

Manfaat menjalankan PostgreSQL di Docker

Docker memberi Anda cara yang elegan untuk menjalankan database PostgreSQL. Ada beberapa manfaat jelas dibanding metode instalasi tradisional:

  • Instalasi dan penyiapan yang disederhanakan: Dengan Docker, Anda dapat menjalankan instance PostgreSQL hanya dengan satu perintah. Tidak perlu lagi berurusan dengan manajer paket, dependensi sistem, atau skrip instalasi yang rumit. Database hadir dengan konfigurasi awal yang masuk akal dan siap digunakan segera.
  • Lingkungan konsisten di seluruh tim: Semua orang di tim Anda mendapatkan pengaturan PostgreSQL yang sama persis, apa pun sistem operasinya. Ini menghilangkan masalah “berfungsi di mesin saya” yang umum di tim pengembangan.
  • Isolasi dari komponen sistem lain: Container Docker berjalan terisolasi, artinya instance PostgreSQL Anda tidak akan mengganggu perangkat lunak lain di mesin Anda. Anda dapat menjalankan beberapa versi PostgreSQL secara bersamaan tanpa konflik, dan menghapus PostgreSQL semudah menghentikan dan menghapus container.
  • Kontrol versi untuk lingkungan database Anda: Docker memungkinkan Anda menentukan versi PostgreSQL secara tepat dalam berkas konfigurasi. Ini memastikan lingkungan pengembangan sama persis dengan produksi, dan Anda dapat menguji peningkatan secara terisolasi sebelum menerapkannya ke sistem produksi.
  • Efisiensi sumber daya: Container Docker lebih ringan dibanding mesin virtual. Container menggunakan lebih sedikit sumber daya sistem dengan manfaat isolasi yang serupa. Artinya, Anda dapat menjalankan PostgreSQL berdampingan dengan container lain tanpa berdampak signifikan pada performa sistem.

Kapan menggunakan PostgreSQL di Docker

Setelah bertahun-tahun bekerja dengan database di lingkungan terkontainer, saya bisa katakan dengan aman bahwa pendekatan ini memberikan banyak manfaat dibanding instalasi tradisional.

Demi kepraktisan, berikut beberapa contohnya:

  • Lingkungan pengembangan lokal: Bagi pengembang yang membangun aplikasi menggunakan PostgreSQL, Docker menyediakan cara cepat untuk memulai tanpa mengubah sistem lokal. Anda dapat menyamakan versi dan konfigurasi database dengan produksi, sehingga kode yang berjalan secara lokal juga berjalan saat dideploy.
  • Arsitektur microservices: Jika Anda membangun aplikasi berbasis microservices, Docker memungkinkan setiap service memiliki instance database sendiri bila diperlukan. Ini memberikan isolasi yang lebih baik antar service dan memungkinkan tiap tim mengelola dependensi database secara mandiri.
  • Pipeline CI/CD dan pengujian otomatis: Docker memudahkan pembuatan instance database baru untuk menjalankan pengujian. Setiap eksekusi tes dapat dimulai dari kondisi database bersih, yang meningkatkan keandalan pengujian. 
  • Pengembangan skrip migrasi database: Docker menyediakan lingkungan aman untuk menguji migrasi database. Anda dapat memverifikasi skrip migrasi pada database sementara yang sesuai dengan lingkungan produksi sebelum menerapkannya ke sistem nyata.
  • Deployment Kubernetes: Jika Anda menggunakan Kubernetes untuk orkestrasi, menjalankan PostgreSQL di Docker adalah pilihan alami. Lingkungan pengembangan lokal dapat sangat mirip dengan pengaturan Kubernetes produksi, sehingga alur kerja dari pengembangan ke produksi menjadi mulus.

Singkatnya, PostgreSQL yang ditingkatkan dengan Docker bermanfaat untuk pengembangan dan pengujian, namun perlu dicatat bahwa mengelola deployment database produksi memerlukan pertimbangan tambahan terkait persistensi data, pencadangan, dan ketersediaan tinggi.

Saya akan menyinggung beberapa pertimbangan ini di bagian-bagian selanjutnya.

Menyiapkan PostgreSQL di Docker

Satu-satunya hal yang Anda butuhkan untuk menjalankan database Postgres di Docker adalah engine Docker itu sendiri.

Di bagian ini, saya akan memandu Anda melalui prasyarat dan menjalankan database PostgreSQL yang sepenuhnya berfungsi di dalam container Docker.

Prasyarat

Sebelum memulai PostgreSQL di Docker, Anda perlu menginstal Docker di sistem Anda.

Instalasi berbeda-beda tergantung sistem operasi. Pengguna Windows dan macOS dapat langsung menginstal Docker Desktop, antarmuka grafis yang mudah digunakan untuk mengelola container. Unduh dari situs resmi Docker.

Pengguna Linux dapat menginstal Docker Engine langsung menggunakan manajer paket distribusinya. Misalnya, di Ubuntu:

sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker

Selain memasang Docker, disarankan Anda familiar dengan perintah terminal dasar dan konsep Docker dasar, seperti image, container, dan volume. Panduan praktis dari DataCamp berikut dapat membantu:

Mengunduh image Docker PostgreSQL

Sebelum menjalankan PostgreSQL, Anda perlu mengunduh image Docker PostgreSQL resmi dari Docker Hub. Image ini menjadi template untuk membuat container.

Untuk menarik image PostgreSQL terbaru, buka terminal atau command prompt dan jalankan:

docker pull postgres

Perintah ini mengunduh versi stabil terbaru PostgreSQL. Jika Anda membutuhkan versi tertentu, tentukan dengan tag:

docker pull postgres:17

Gambar 1 - Mengunduh versi stabil terbaru image database PostgreSQL

Gambar 1 - Mengunduh versi stabil terbaru image database PostgreSQL

Beberapa tag image PostgreSQL yang umum digunakan antara lain:

  • postgres:latest - Versi stabil PostgreSQL paling baru
  • postgres:17 - PostgreSQL versi 14.x (patch terbaru dari versi 17)
  • postgres:17.4 - Versi spesifik (dalam contoh ini 17.4).
  • postgres:bookworm - PostgreSQL dibangun di distribusi Linux Debian Bookworm.

Anda dapat melihat semua tag yang tersedia di halaman resmi PostgreSQL Docker Hub.

Menjalankan PostgreSQL di container Docker

Setelah memiliki image PostgreSQL, Anda dapat membuat dan memulai container dengan satu perintah:

docker run --name postgres-db -e POSTGRES_PASSWORD=mypassword postgres

Gambar 2 - Memulai container PostgreSQL

Gambar 2 - Memulai container PostgreSQL

Perintah ini membuat container baru bernama postgres-db dan menetapkan variabel lingkungan untuk kata sandi PostgreSQL.

Namun, perintah dasar ini memiliki keterbatasan. Saya sarankan menggunakan opsi tambahan berikut:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mypassword \
  -e POSTGRES_USER=myuser \
  -e POSTGRES_DB=mydatabase \
  -p 5432:5432 \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres

Gambar 3 - Memulai container PostgreSQL dengan variabel lingkungan dalam mode detached

Gambar 3 - Memulai container PostgreSQL dengan variabel lingkungan dalam mode detached

Berikut penjelasan opsi tambahan tersebut:

  • Variabel lingkungan:
    • POSTGRES_PASSWORD: Menetapkan kata sandi untuk superuser PostgreSQL (wajib).
    • POSTGRES_USER: Membuat superuser baru dengan nama ini (default "postgres" jika tidak ditentukan).
    • POSTGRES_DB: Membuat database baru dengan nama ini (default sama dengan nama pengguna jika tidak ditentukan).
  • Pemetaan port (-p 5432:5432) memetakan port PostgreSQL container (5432) ke port yang sama di host Anda, sehingga Anda dapat terhubung ke PostgreSQL melalui localhost:5432.
  • Pemasangan volume (-v postgres-data:/var/lib/postgresql/data) membuat volume Docker bernama postgres-data yang menyimpan berkas database di luar container. Ini memastikan data Anda tidak hilang saat container dihentikan atau dihapus.
  • Flag -d memastikan container berjalan dalam mode detached. Dengan kata lain, container berjalan di latar belakang.

Anda dapat memverifikasi container sedang berjalan dengan:

docker ps

Gambar 4 - Menampilkan semua container yang sedang berjalan

Gambar 4 - Menampilkan semua container yang sedang berjalan

Di bagian berikutnya, saya akan menunjukkan cara mengonfigurasi container PostgreSQL Anda lebih lanjut untuk kasus penggunaan spesifik.

Mengonfigurasi PostgreSQL di Docker

Penyiapan dasar yang saya bahas di bagian sebelumnya akan membantu Anda memulai, tetapi untuk kebutuhan yang lebih lanjut, Anda mungkin ingin menyesuaikan container PostgreSQL.

Bagian ini akan membahas hal tersebut.

Menyiapkan penyimpanan persisten dengan volume

Salah satu aspek terpenting saat menjalankan database di Docker adalah memastikan data Anda tetap ada melampaui siklus hidup container. Secara default, semua data di container akan hilang ketika container dihapus. Untuk database, ini hampir tidak pernah diinginkan.

Volume Docker memberikan solusi dengan menyimpan data di luar filesystem container.

Untuk menyiapkannya, mulai dengan membuat volume bernama:

docker volume create postgres-data

Anda bisa secara opsional memeriksa detail volume dengan menjalankan perintah berikut:

docker volume inspect postgres-data

Gambar 5 - Menampilkan detail volume

Gambar 5 - Menampilkan detail volume

Sekarang, saat memulai container PostgreSQL, kaitkan volume ke direktori data PostgreSQL:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres

Parameter -v postgres-data:/var/lib/postgresql/data menghubungkan volume bernama ke direktori data di dalam container.

Singkatnya, menggunakan volume untuk PostgreSQL memberikan keuntungan berikut:

  • Data Anda tetap ada meski container dihapus.
  • Anda dapat menghentikan, memulai, atau meningkatkan container tanpa kehilangan data.
  • Anda dapat membuat cadangan data dengan mencadangkan volume.
  • Performa lebih baik dibanding bind mount (terutama di macOS dan Windows).

Mengekspos port untuk terhubung ke PostgreSQL

Untuk menghubungkan aplikasi di host machine Anda ke database PostgreSQL, Anda perlu mengekspos port PostgreSQL (5432) ke sistem lokal.

Cara paling sederhana adalah memetakan port 5432 container ke port yang sama di host:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -p 5432:5432 \
  -d postgres

Parameter -p 5432:5432 memetakan port 5432 di container ke port 5432 di host.

Jika Anda sudah memiliki PostgreSQL atau layanan lain yang menggunakan port 5432 di host, Anda dapat memetakan ke port berbeda:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -p 5433:5432 \
  -d postgres

Sekarang, port 5432 container dipetakan ke port 5433 di host. Saat terhubung, Anda harus menentukan port 5433, bukan 5432 bawaan.

Secara default, port diekspos di semua antarmuka jaringan (0.0.0.0). Anda dapat membatasinya ke localhost untuk keamanan tambahan:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -p 127.0.0.1:5432:5432 \
  -d postgres

Ini hanya mengizinkan koneksi dari mesin lokal Anda, bukan dari mesin lain di jaringan.

Mengonfigurasi pengaturan PostgreSQL

Anda dapat mengubah banyak pengaturan default PostgreSQL saat menjalankan container. Salah satu pendekatan umum, meski bukan satu-satunya, adalah menggunakan variabel lingkungan.

Berikut beberapa variabel yang dapat Anda gunakan untuk mengonfigurasi database:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -e POSTGRES_USER=myuser \
  -e POSTGRES_DB=mydatabase \
  -e POSTGRES_INITDB_ARGS="--data-checksums" \
  -e POSTGRES_HOST_AUTH_METHOD=scram-sha-256 \
  -d postgres

Berikut fungsi masing-masing variabel:

  • POSTGRES_PASSWORD: Menetapkan kata sandi superuser (wajib).
  • POSTGRES_USER: Menetapkan nama superuser (default "postgres").
  • POSTGRES_DB: Menetapkan nama database default (default sama dengan nama pengguna).
  • POSTGRES_INITDB_ARGS: Meneruskan argumen ke perintah initdb PostgreSQL.
  • POSTGRES_HOST_AUTH_METHOD: Menetapkan metode autentikasi.

Selain variabel lingkungan, Anda juga dapat menyesuaikan konfigurasi PostgreSQL untuk melakukan perubahan yang lebih lanjut pada konfigurasi database.

Beberapa pengaturan PostgreSQL yang sering disesuaikan antara lain:

  • max_connections: Mengatur jumlah koneksi yang diterima PostgreSQL (default 100).
  • shared_buffers: Menetapkan memori untuk caching (default sering terlalu rendah untuk produksi).
  • work_mem: Memori untuk operasi kueri.
  • maintenance_work_mem: Memori untuk operasi pemeliharaan.

Untuk implementasi praktis, mulailah dengan membuat berkas, sebut saja my-postgres-conf:

max_connections = 200
shared_buffers = 1GB
work_mem = 16MB
maintenance_work_mem = 256MB

Sekarang, mount berkas ini saat menjalankan container:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -v ./my-postgres.conf:/etc/postgresql/postgresql.conf \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres \
  -c 'config_file=/etc/postgresql/postgresql.conf'

Singkatnya, dengan mengonfigurasi persistensi, akses jaringan, dan pengaturan PostgreSQL dengan benar, Anda dapat membuat lingkungan PostgreSQL berbasis Docker yang berjalan sesuai keinginan. Image dasar postgres:latest hanyalah dasar—banyak yang bisa Anda sesuaikan.

Di bagian berikutnya, saya akan menunjukkan cara terhubung ke database PostgreSQL yang berjalan di Docker.

Menyambung ke PostgreSQL yang Berjalan di Docker

Setelah container PostgreSQL Anda berjalan, langkah berikutnya adalah menghubungkannya. Bagaimanapun, untuk itulah database dijalankan.

Di bagian ini, saya akan menunjukkan dua cara untuk terhubung ke database PostgreSQL terkontainer: menggunakan alat baris perintah psql dan menggunakan antarmuka grafis.

Sebagai referensi, saya menjalankan container database saya dengan perintah ini:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -e POSTGRES_USER=myuser \
  -e POSTGRES_DB=mydatabase \
  -v postgres-data:/var/lib/postgresql/data \
  -p 5432:5432 \
  -d postgres

Menyambung menggunakan alat baris perintah psql

Alat baris perintah psql adalah klien resmi PostgreSQL yang memungkinkan Anda berinteraksi dengan database menggunakan perintah SQL. 

Untuk terhubung ke database PostgreSQL yang berjalan di container dari host machine Anda, jalankan perintah berikut, namun ingat untuk memperbarui nilai user dan database:

docker exec -it postgres-db psql -U myuser -d mydatabase

Gambar 6 - Menyambung ke database Postgres menggunakan psql

Gambar 6 - Menyambung ke database Postgres menggunakan psql

Dan itu saja!

Jika Anda tidak yakin apa yang dilakukan perintah tersebut, berikut ringkasannya:

  • docker exec -it postgres-db: Menjalankan perintah interaktif di dalam container bernama "postgres-db".
  • psql -U myuser -d mydatabase: Memulai psql, terhubung sebagai "myuser" ke database "mydatabase".

Jika Anda mengalami masalah saat menyambung, periksa hal-hal umum berikut:

  • Pastikan container berjalan dengan docker ps.
  • Verifikasi pemetaan port dengan docker port postgres-db.

Menyambung menggunakan alat GUI

Banyak pengembang lebih memilih alat grafis daripada CLI—saya juga begitu. pgAdmin adalah pilihan populer dan gratis untuk PostgreSQL, tetapi proses koneksi serupa untuk alat lain seperti DBeaver, DataGrip, atau TablePlus.

Instalasi pgAdmin cukup langsung, jadi tidak akan saya bahas di sini.

Dengan asumsi Anda sudah menginstal dan menjalankannya, klik kanan pada "Servers" di panel browser dan pilih "Register > Server". Sekarang, di tab General, beri nama koneksi Anda:

Gambar 7 - Tab General pgAdmin

Gambar 7 - Tab General pgAdmin

Kemudian beralih ke tab "Connection" dan masukkan detail berikut:

  • Host name/address: localhost
  • Port: 5432 (atau port yang Anda petakan)
  • Maintenance database: mydatabase
  • Username: myuser
  • Password: Kata sandi PostgreSQL Anda

Gambar 8 - Tab Connection pgAdmin

Gambar 8 - Tab Connection pgAdmin

Terakhir, klik "Save" untuk terhubung:

Gambar 9 - Koneksi berhasil

Gambar 9 - Koneksi berhasil

Setelah terhubung, Anda dapat mulai bekerja dengan database sebagaimana pada instance PostgreSQL yang diinstal lokal atau disediakan di cloud. Keunggulan Docker adalah, dari perspektif aplikasi atau klien Anda, tidak ada perbedaan—itu hanyalah database PostgreSQL yang dapat diakses di alamat yang ditentukan.

>Butuh akses terprogram ke database PostgreSQL Anda? Pelajari cara mengaksesnya dari Python.

Di bagian berikutnya, saya akan membahas cara mengelola container PostgreSQL Anda, termasuk menghentikan, memulai, dan memantaunya.

Mengelola PostgreSQL di Docker

Menjalankan database PostgreSQL di container dan menyambungkannya adalah satu hal, tetapi mengelolanya adalah hal lain. Untungnya, ada sejumlah perintah yang bisa Anda gunakan.

Di bagian ini, saya akan membahas operasi penting seperti menghentikan dan memulai container, memeriksa log, dan menjaga versi PostgreSQL Anda tetap terbaru.

Menghentikan, memulai ulang, dan menghapus container PostgreSQL

Alat baris perintah Docker memungkinkan Anda mengelola siklus hidup container PostgreSQL Anda.

Untuk menghentikan container PostgreSQL yang sedang berjalan, jalankan:

docker stop postgres-db

Demikian pula, jalankan perintah berikut saat Anda perlu memulainya kembali:

docker start postgres-db

Gambar 10 - Menghentikan dan memulai container

Gambar 10 - Menghentikan dan memulai container

Jika Anda ingin memulai ulang container yang sedang berjalan, yang berguna setelah mengubah konfigurasi tertentu, jalankan perintah berikut:

docker restart postgres-db

Dalam kasus saat Anda benar-benar selesai dengan sebuah container dan ingin menghapusnya, gunakan dua perintah berikut:

docker stop postgres-db
docker rm postgres-db

Ingat bahwa menghapus container tidak menghapus data Anda jika Anda telah menyiapkan volume dengan benar. Data Anda akan tetap ada di volume postgres-data yang dibuat sebelumnya.

Anda dapat memverifikasi bahwa container telah dihapus dengan menjalankan:

docker ps -a

Flag -a menampilkan semua container, termasuk yang sudah dihentikan. Jika container berhasil dihapus, tidak akan muncul dalam daftar ini:

Gambar 11 - Menampilkan semua container

Gambar 11 - Menampilkan semua container

Memeriksa log

Saat terjadi sesuatu yang salah atau Anda ingin memantau aktivitas database, memeriksa log adalah langkah pertama yang baik.

Jalankan perintah ini untuk melihat log container PostgreSQL Anda:

docker logs postgres-db

Perintah ini menampilkan semua log sejak container dimulai. Untuk jumlah log yang besar, Anda mungkin ingin membatasi keluaran, misalnya hanya 50 log terakhir:

docker logs --tail 50 postgres-db

Gambar 12 - Melihat log container

Gambar 12 - Melihat log container

Di sisi lain, jika Anda ingin mengikuti log secara real-time, jalankan perintah ini:

docker logs -f postgres-db

Gambar 13 - Melihat log container secara real-time

Gambar 13 - Melihat log container secara real-time

Ini sangat berguna saat men-debug masalah koneksi atau memantau aktivitas database selama pengembangan.

Tekan Ctrl+C/CMD+C untuk berhenti mengikuti log.

Memperbarui PostgreSQL di Docker

Seiring waktu, Anda akan ingin memperbarui versi PostgreSQL untuk mendapatkan fitur terbaru, peningkatan performa, dan patch keamanan.

Saat tulisan ini dibuat, postgres:17.4 adalah versi terbaru, namun mari berasumsi secara teoretis postgres:17.5 telah dirilis. Bagian ini akan menunjukkan cara memperbarui versi database di container Anda.

Mulailah dengan menarik image PostgreSQL terbaru (atau versi tertentu):

docker pull postgres:17.5

Selanjutnya, hentikan dan hapus container yang ada:

docker stop postgres-db
docker rm postgres-db

Terakhir, buat container baru dengan volume yang sama:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -e POSTGRES_USER=myuser \
  -e POSTGRES_DB=mydatabase \
  -v postgres-data:/var/lib/postgresql/data \
  -p 5432:5432 \
  -d postgres:17.5

Karena Anda menggunakan volume yang sama (postgres-data), seluruh data yang ada akan tetap tersimpan.

Jika Anda meningkatkan ke versi mayor baru (misalnya 17 ke 18), PostgreSQL akan otomatis menjalankan migrasi data yang diperlukan saat mulai. Perhatikan beberapa hal berikut:

  • Peningkatan versi mayor sebaiknya diuji terlebih dahulu di lingkungan non-produksi.
  • Selalu buat cadangan volume data Anda sebelum peningkatan versi mayor.
  • Periksa catatan rilis PostgreSQL untuk perubahan yang berpotensi merusak.

Untuk membuat cadangan sebelum peningkatan, jalankan perintah berikut:

docker run --rm -v postgres-data:/data -v $(pwd):/backup postgres:17.4 \
  bash -c "pg_dumpall -U myuser > /backup/postgres_backup.sql"

Ini akan membuat berkas cadangan SQL di direktori saat ini yang dapat Anda gunakan untuk memulihkan data jika terjadi masalah.

>Anda mungkin akan merasa Cheat Sheet Dasar PostgreSQL kami berguna sebagai referensi cepat saat bekerja di Docker.

Di bagian berikutnya, saya akan membahas praktik terbaik untuk menggunakan PostgreSQL di Docker, termasuk pertimbangan keamanan dan tips optimasi.

Praktik Terbaik Menggunakan PostgreSQL di Docker

Fleksibilitas Docker datang dengan tanggung jawab. Di bagian ini, saya akan membagikan beberapa praktik terbaik untuk memastikan pengaturan PostgreSQL terkontainer Anda andal, aman, dan mengikuti standar industri.

Jaga keamanan data dengan pencadangan rutin

Apa pun cara Anda menjalankan PostgreSQL, pencadangan rutin adalah keharusan. Saya telah menyinggung pencadangan di bagian sebelumnya, tetapi di sini saya tingkatkan sedikit. 

Cara termudah untuk mencadangkan database PostgreSQL yang berjalan di Docker adalah menggunakan pg_dump:

docker exec -t postgres-db pg_dump -U myuser mydatabase > backup.sql

Gambar 14 - Pencadangan PostgreSQL

Gambar 14 - Pencadangan PostgreSQL

Untuk cadangan penuh semua database, termasuk role dan tablespace, gunakan pg_dumpall:

docker exec -t postgres-db pg_dumpall -U myuser > full_backup.sql

Gambar 15 - Cadangan penuh database PostgreSQL

Gambar 15 - Cadangan penuh database PostgreSQL

Gambar ini hanya menampilkan beberapa perintah pencadangan, karena tidak mungkin menampilkan semuanya dalam satu layar.

Untuk mengotomatiskan pencadangan, Anda dapat membuat skrip shell sederhana dan menjalankannya dengan cron:

#!/bin/bash
# backup.sh
TIMESTAMP=$(date +"%Y%m%d")
BACKUP_DIR="/Users/dradecic/Documents/pg-backups"

# Pastikan direktori backup ada
mkdir -p $BACKUP_DIR

# Buat backup
docker exec postgres-db pg_dumpall -U myuser | gzip > $BACKUP_DIR/postgres_$TIMESTAMP.sql.gz

# Hapus backup yang lebih lama dari 30 hari
find $BACKUP_DIR -name "postgres_*.sql.gz" -mtime +30 -delete

Jadikan skrip dapat dieksekusi dan jalankan:

chmod +x backup.sh

bash backup.sh

Gambar 16 - Menjalankan skrip pencadangan database PostgreSQL

Gambar 16 - Menjalankan skrip pencadangan database PostgreSQL

Untuk sepenuhnya mengotomatiskan pencadangan, Anda dapat menambahkan skrip ke crontab agar berjalan setiap hari:

0 3 * * * /path/to/backup.sh

Jadwal ini menjalankan pencadangan setiap hari pukul 03.00, namun tentu saja Anda dapat menyesuaikan waktu dan frekuensinya sesuai kebutuhan. 

>Lihat panduan lengkap saya tentang cron job untuk mempelajari lebih lanjut tentang alat otomatisasi yang berguna ini.

Untuk lingkungan produksi, pertimbangkan menyimpan cadangan di luar lokasi atau di penyimpanan cloud untuk pemulihan bencana.

Gunakan volume bernama untuk persistensi data

Meskipun saya sudah membahas volume secara singkat, ada baiknya meninjaunya lebih dalam.

Sebagai aturan umum, Anda sebaiknya jangan pernah menjalankan PostgreSQL di Docker tanpa volume yang dikonfigurasi dengan benar. Jika tidak, data Anda akan hilang saat container dihapus atau ketika Docker melakukan pembersihan.

Menggunakan volume bernama (bukan volume anonim) membuat pencadangan dan pengelolaan data jauh lebih mudah:

# Buat volume bernama
docker volume create postgres-data

# Gunakan saat menjalankan container
docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres

Tidak ada yang baru di sini.

Volume bernama juga lebih mudah untuk dicadangkan. Untuk membuat cadangan seluruh volume, jalankan perintah berikut:

docker run --rm -v postgres-data:/data -v $(pwd):/backup alpine tar czf /backup/postgres-data-backup.tar.gz /data

Perintah ini akan membuat berkas postgres-data-backup.tar.gz di folder yang sama tempat Anda mengeksekusi perintah.

Untuk memulihkan volume ini, jalankan:

docker run --rm -v postgres-data:/data -v $(pwd):/backup alpine sh -c "cd /data && tar xzf /backup/postgres-data-backup.tar.gz --strip 1"

Selesai!

Mengamankan PostgreSQL di Docker

Keamanan tidak boleh dianggap sepele saat berurusan dengan database. Subbagian ini akan membahas praktik penting untuk mengamankan container PostgreSQL Anda.

Gunakan kata sandi yang kuat dan unik

Hindari kata sandi default atau lemah. Hasilkan kata sandi acak yang kuat untuk superuser PostgreSQL:

export POSTGRES_PASSWORD=$(openssl rand -base64 32)
echo "$POSTGRES_PASSWORD" > postgres-password.txt

docker run --name postgres-db \
  -e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres

Gambar 17 - Menggunakan kata sandi yang aman

Gambar 17 - Menggunakan kata sandi yang aman

Simpan kata sandi ini dengan aman, misalnya di pengelola kata sandi atau berkas variabel lingkungan yang tidak dimasukkan ke version control.

Batasi akses jaringan

Secara default, Docker mengekspos port PostgreSQL di semua antarmuka. Untuk keamanan yang lebih baik, terutama di produksi, batasi akses ke localhost:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -p 127.0.0.1:5432:5432 \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres

Gunakan konfigurasi PostgreSQL kustom

Buat konfigurasi PostgreSQL yang lebih aman dengan memodifikasi parameter seperti di bawah ini:

# Wajibkan SSL
ssl = on
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'

# Batasi upaya koneksi
max_connections = 100
authentication_timeout = 1min

# Batasi akses
listen_addresses = 'localhost'

Mount berkas konfigurasi ini saat memulai container:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -v ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf \
  -v ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres

Perbarui image PostgreSQL Anda secara berkala

Jaga versi PostgreSQL Anda tetap terbaru untuk mendapatkan patch keamanan terkini:

docker pull postgres:latest
docker stop postgres-db
docker rm postgres-db
# Lalu buat ulang dengan image terbaru

Praktik terbaik ini akan membantu Anda membangun lingkungan PostgreSQL di Docker yang lebih andal dan aman, cocok untuk kebutuhan pengembangan maupun produksi.

Di bagian berikutnya, saya akan membahas cara menelusuri masalah umum yang mungkin Anda temui saat menjalankan PostgreSQL di Docker.

Menelusuri Masalah PostgreSQL di Docker

Cepat atau lambat, Anda pasti akan menemui masalah saat menjalankan PostgreSQL di Docker. Saya akan membahas masalah umum dan solusinya di bagian ini untuk menghemat waktu dan mengurangi frustasi Anda.

Masalah umum pada container PostgreSQL

Salah satu masalah umum adalah container keluar segera setelah dijalankan. Jika itu terjadi, periksa log untuk mengidentifikasi masalahnya:

docker logs postgres-db

Kesalahan Anda bisa terkait dengan masalah izin pada volume yang di-mount. Jika demikian, Anda akan melihat pesan log serupa:

initdb: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted

Untuk menyelesaikannya, periksa kepemilikan dan izin volume Anda lalu perbaiki jika perlu:

# Periksa kepemilikan
docker run --rm -v postgres-data:/data alpine ls -la /data

# Perbaiki izin
docker run --rm -v postgres-data:/data alpine chmod 700 /data

Masalah umum lainnya adalah variabel lingkungan wajib tidak ditetapkan. Pesan log khasnya terlihat seperti ini:

Database is uninitialized and superuser password is not specified

Untuk mengatasinya, pastikan Anda menetapkan variabel lingkungan POSTGRES_PASSWORD yang wajib—atau variabel lingkungan lain yang diperlukan:

docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -v postgres-data:/var/lib/postgresql/data \
  -d postgres

Kesalahan “Data directory not empty but missing PostgreSQL files” juga umum. Pesan log yang kemungkinan Anda lihat:

PostgreSQL Database directory appears to contain a database; Skipping initialization

Diikuti oleh error tentang berkas yang hilang.

Ini biasanya terjadi ketika Anda memasang volume yang berisi berkas namun bukan database PostgreSQL yang valid. Anda mungkin perlu inisialisasi ulang dengan menggunakan volume baru:

docker volume create postgres-data-new
docker run --name postgres-db \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -v postgres-data-new:/var/lib/postgresql/data \
  -d postgres

Mengatasi masalah konektivitas

Jika Anda tidak dapat menyambung ke database PostgreSQL di container, mulailah dengan memastikan container berjalan:

docker ps | grep postgres-db

Jika tidak terdaftar, mungkin container crash. Periksa log seperti dijelaskan sebelumnya.

Jika terdaftar tetapi Anda tetap tidak bisa tersambung, verifikasi pemetaan port:

docker port postgres-db

Anda akan melihat sesuatu seperti ini:

Gambar 18 - Pemetaan port container

Gambar 18 - Pemetaan port container

Jika tidak, pemetaan port Anda mungkin salah. Buat ulang container dengan opsi -p yang benar.

Jika Anda masih tidak bisa terhubung ke database, saatnya memeriksa pengaturan koneksi. Periksa parameter berikut:

  • Hostname: localhost atau 127.0.0.1 (bukan nama container).
  • Port: Port host dari pemetaan Anda (biasanya 5432).
  • Username: Nilai POSTGRES_USER (default "postgres").
  • Password: Nilai POSTGRES_PASSWORD.
  • Database: Nilai POSTGRES_DB (default sama dengan POSTGRES_USER).

Coba lagi setelah menangani hal-hal di atas. Jika masalah tetap ada, Anda sebaiknya menguji konektivitas dari dalam container:

docker exec -it postgres-db psql -U postgres

Jika ini berhasil, masalahnya ada pada pemetaan port atau jaringan eksternal Anda.

Terakhir, Anda dapat memeriksa masalah firewall. Firewall sistem Anda mungkin memblokir koneksi ke port PostgreSQL, jadi periksalah:

# Linux
sudo iptables -L | grep 5432

# macOS
sudo pfctl -sr | grep 5432

Dengan memeriksa masalah umum ini, Anda seharusnya dapat mengidentifikasi dan menyelesaikan sebagian besar masalah PostgreSQL di Docker. Jika masih buntu, dokumentasi dan forum komunitas PostgreSQL serta Docker adalah sumber daya yang sangat baik untuk penelusuran masalah yang lebih spesifik.

Rangkuman Database PostgreSQL di Docker

Itulah dia—panduan lengkap untuk mengonfigurasi dan menjalankan database PostgreSQL di Docker! Saya telah membahas semua yang perlu Anda ketahui untuk memulai, mulai dari menyiapkan container pertama hingga mengonfigurasi, menyambung, dan mengelola database. 

Opsi PostgreSQL tradisional, seperti menginstal database secara lokal atau menyediakannya di cloud, cenderung kurang optimal atau mahal untuk tujuan pengembangan. Docker menjembatani kesenjangan ini. Baik untuk pengembangan lokal, pengujian, maupun lingkungan produksi, PostgreSQL terkontainer menawarkan fleksibilitas dan konsistensi yang sulit ditandingi.

Sekarang Anda lebih dari siap untuk mengintegrasikan database Postgres terkontainer ke dalam aplikasi Anda.

Jika Anda ingin menyelam lebih dalam, saya merekomendasikan kursus-kursus dari DataCamp berikut:

FAQs

Mengapa saya harus menjalankan PostgreSQL di Docker dibanding instalasi tradisional?

Menggunakan PostgreSQL di Docker menawarkan instalasi yang disederhanakan, lingkungan yang konsisten di berbagai mesin, dan isolasi dari komponen sistem lain. Anda dapat menjalankan beberapa versi PostgreSQL secara bersamaan tanpa konflik, memudahkan upgrade dan downgrade, serta memungkinkan penyiapan dan pembongkaran cepat untuk pengembangan dan pengujian. Container Docker juga menggunakan lebih sedikit sumber daya sistem dibanding mesin virtual.

Bagaimana cara saya terhubung ke database PostgreSQL yang berjalan di Docker?

Anda dapat terhubung ke database PostgreSQL yang berjalan di Docker menggunakan perintah docker exec -it postgres-db psql -U myuser -d mydatabase untuk mengakses alat baris perintah psql langsung di container. Alternatifnya, Anda dapat menggunakan alat GUI seperti pgAdmin, DBeaver, atau TablePlus dengan menyambung ke localhost (atau 127.0.0.1) pada port yang Anda petakan (biasanya 5432) menggunakan nama pengguna dan kata sandi yang telah dikonfigurasi.

Apa yang terjadi pada data PostgreSQL saya ketika saya menghapus container Docker?

Saat Anda menghapus container Docker, data apa pun yang disimpan di dalam container akan hilang kecuali Anda menyiapkan volume. Dengan menggunakan volume bernama (seperti docker volume create postgres-data), data database Anda akan tersimpan di luar filesystem container. Artinya, Anda dapat dengan aman menghentikan, menghapus, atau meningkatkan container PostgreSQL tanpa kehilangan data, selama Anda memasang volume yang sama saat membuat container baru.

Bagaimana cara mencadangkan database PostgreSQL saya yang berjalan di Docker?

Untuk mencadangkan database PostgreSQL yang berjalan di Docker, Anda dapat menggunakan perintah pg_dump dengan: docker exec -t postgres-db pg_dump -U myuser mydatabase > backup.sql. Untuk cadangan penuh termasuk semua database dan role, gunakan pg_dumpall. Anda dapat mengotomatiskan pencadangan menggunakan skrip shell dengan cron job agar berjalan pada interval terjadwal, serta menambahkan kompresi dan rotasi backup lama.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Senior Data Scientist yang berbasis di Kroasia. Penulis Tekno Teratas dengan lebih dari 700 artikel yang telah diterbitkan, menghasilkan lebih dari 10 juta tayangan. Penulis buku Machine Learning Automation with TPOT.
Topik
Docker
PostgreSQL

Pelajari lebih lanjut tentang Docker melalui kursus-kursus ini!

Kursus

Pengantar Docker

4 jam
52.8K
Dapatkan pengenalan tentang Docker dan temukan pentingnya dalam kotak alat profesional data. Pelajari tentang kontainer Docker, gambar, dan lainnya.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya