Docker

Cara Install dan Konfigurasi PostgreSQL di Docker

Cara Install dan Konfigurasi PostgreSQL di Docker

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.