PostgreSQL adalah database relasional paling powerful untuk aplikasi production. Dengan Docker, Anda bisa menjalankan PostgreSQL dalam hitungan menit tanpa perlu install manual di host system.
Kenapa PostgreSQL di Docker?
- Isolation — database terpisah dari host system
- Portability — pindah server cukup copy volume
- Version management — jalankan beberapa versi PostgreSQL sekaligus
- Backup mudah — cukup backup volume
- Reproducible — konfigurasi yang sama di development dan production
Install PostgreSQL
# Jalankan PostgreSQL container
docker run -d --name postgres -e POSTGRES_DB=myapp -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=secret123 -v pgdata:/var/lib/postgresql/data -p 5432:5432 --restart unless-stopped postgres:16-alpine
Koneksi ke Database
# Via psql CLI
docker exec -it postgres psql -U admin -d myapp
# Via host (install psql dulu)
psql -h localhost -p 5432 -U admin -d myapp
# Via application
# Connection string: postgresql://admin:secret123@localhost:5432/myapp
Konfigurasi Production
Buat file postgresql.conf tambahan untuk optimasi:
# shared_buffers - 25% dari RAM
shared_buffers = 512MB
# effective_cache_size - 75% dari RAM
effective_cache_size = 1536MB
# work_mem - RAM per query
work_mem = 16MB
# maintenance_work_mem - RAM untuk maintenance
maintenance_work_mem = 256MB
# max_connections
max_connections = 100
Docker Compose Setup
version: '3.8'
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: admin
POSTGRES_PASSWORD: your-secure-password
volumes:
- pgdata:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "127.0.0.1:5432:5432"
restart: unless-stopped
adminer:
image: adminer
ports:
- "8080:8080"
restart: unless-stopped
volumes:
pgdata:
Backup Database
# Backup ke file
docker exec postgres pg_dump -U admin myapp > backup.sql
# Restore dari file
cat backup.sql | docker exec -i postgres psql -U admin myapp
# Backup otomatis dengan cron
0 3 * * * docker exec postgres pg_dump -U admin myapp | gzip > /backup/postgres-$(date +%Y%m%d).sql.gz
Optimasi Performance
- Gunakan named volumes untuk data (bukan bind mount)
- Setup connection pooling dengan PgBouncer untuk aplikasi high-traffic
- Gunakan pg_stat_statements untuk monitoring query performance
- Setup replication untuk high availability
PostgreSQL cocok digunakan dengan Docker Compose untuk aplikasi full-stack. Untuk monitoring database, gunakan Grafana + Prometheus. Untuk keamanan server, baca panduan keamanan lengkap.