Docker Compose ile PostgreSQL kurulum rehberi

📅 15 Ocak 2026Emre Karabulut
⏱️ Yaklaşık 7 dakikalık okuma süresi

Docker Compose ile PostgreSQL Kurulum Rehberi

Sistem yöneticisi olarak, modern uygulama geliştirme ve dağıtım süreçlerinde veritabanı yönetiminin ne kadar kritik olduğunu biliyorum. Docker Compose, karmaşık çoklu konteyner uygulamalarını tanımlama ve çalıştırma için güçlü bir araçtır ve PostgreSQL gibi ilişkisel veritabanlarını izole, taşınabilir ve kolay yönetilebilir bir şekilde kurmak için ideal bir çözümdür. Bu rehberde, Docker Compose kullanarak bir PostgreSQL veritabanını nasıl hızlıca ayağa kaldıracağımızı adım adım inceleyeceğiz.

Neden Docker Compose ile PostgreSQL?

Geleneksel veritabanı kurulumları genellikle işletim sistemine bağımlılıklar, versiyon çakışmaları ve manuel konfigürasyon gibi zorluklarla doludur. Docker Compose bu sorunları ortadan kaldırır:

  • İzolasyon: Veritabanı, diğer sistem bileşenlerinden tamamen izole bir ortamda çalışır.
  • Taşınabilirlik: Aynı `docker-compose.yml` dosyası ile her ortamda (geliştirme, test, üretim) aynı veritabanı ortamını oluşturabilirsiniz.
  • Kolay Yönetim: Tek bir komutla veritabanını başlatabilir, durdurabilir ve silebilirsiniz.
  • Veri Kalıcılığı: Verileriniz konteyner yaşam döngüsünden bağımsız olarak kalıcı depolama alanlarında saklanır.
  • Versiyon Kontrolü: `docker-compose.yml` dosyası versiyon kontrol sistemlerine entegre edilebilir, bu da altyapı kod olarak (IaC) yaklaşımını destekler.

Ön Gereksinimler

Bu rehberi takip edebilmek için sisteminizde aşağıdaki bileşenlerin kurulu olması gerekmektedir:

  • Docker Engine: Konteynerleri çalıştırmak için temel araç.
  • Docker Compose: Çoklu konteyner uygulamalarını yönetmek için Docker ile birlikte gelir (Docker Desktop ile otomatik kurulur).

Kurulumları kontrol etmek için terminalinizde aşağıdaki komutları çalıştırabilirsiniz:

docker --version
docker compose version

Proje Yapısının Oluşturulması

İlk adım olarak, projemiz için bir dizin oluşturalım ve bu dizine geçelim:

mkdir postgresql-dc-rehberi
cd postgresql-dc-rehberi

Bu dizin içinde, Docker Compose konfigürasyon dosyamızı (`docker-compose.yml`) ve hassas bilgileri depolamak için bir çevre değişkenleri dosyasını (`.env`) oluşturacağız.

touch docker-compose.yml
touch .env

`docker-compose.yml` Dosyasının Oluşturulması

Şimdi `docker-compose.yml` dosyamızı aşağıdaki gibi düzenleyelim. Bu dosya, PostgreSQL servisimizi ve ona ait özellikleri tanımlar.

version: '3.8'

services:
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: /var/lib/postgresql/data/pgdata # Veri yolunu belirleriz
    ports:
      - "5432:5432" # Host:Container port eşleşmesi
    volumes:
      - db-data:/var/lib/postgresql/data # Veri kalıcılığı için named volume
    networks:
      - app_network # İsteğe bağlı, ağ izolasyonu için

volumes:
  db-data: # Named volume tanımı

networks:
  app_network: # İsteğe bağlı, ağ tanımı

Açıklamalar:

  • `version: ‘3.8’`: Docker Compose dosya formatının sürümünü belirtir.
  • `services`: Tanımladığımız konteyner servislerini içerir.
  • `db`: PostgreSQL servisi için verdiğimiz isimdir. Uygulamanız bu isimle veritabanına bağlanacaktır.
  • `image: postgres:15-alpine`: PostgreSQL’in hangi sürümünü kullanacağımızı belirtir. `alpine` etiketi, daha küçük bir imaj boyutu ve daha hızlı indirme süreleri sağlar.
  • `restart: always`: Konteynerin bir hata durumunda veya Docker daemon yeniden başlatıldığında otomatik olarak tekrar başlatılmasını sağlar.
  • `environment`: PostgreSQL konteyneri için gerekli ortam değişkenlerini tanımlar. Bu değişkenler `.env` dosyasından alınır.
    • `POSTGRES_DB`: Oluşturulacak ilk veritabanının adı.
    • `POSTGRES_USER`: Veritabanı kullanıcısının adı.
    • `POSTGRES_PASSWORD`: Veritabanı kullanıcısının parolası.
    • `PGDATA`: Veritabanı verilerinin konteyner içindeki depolama yolunu belirler.
  • `ports: – “5432:5432″`: Host makinemizin 5432 portunu, konteynerin 5432 portuna yönlendirir. Bu, host makinemizden veritabanına bağlanmamızı sağlar.
  • `volumes: – db-data:/var/lib/postgresql/data`: Veritabanı verilerinin kalıcılığını sağlar. `db-data` adında bir named volume oluşturulur ve konteyner içindeki `/var/lib/postgresql/data` yoluna bağlanır. Bu sayede konteyner silinse bile verileriniz kaybolmaz.
  • `networks: – app_network`: İsteğe bağlı olarak, bu servisi belirli bir ağa atarız. Bu, diğer servislerin bu ağ üzerinden `db` servisi ile iletişim kurmasını sağlar.
  • `volumes`: En üst seviyede `db-data` named volume’unun tanımını yaparız.
  • `networks`: En üst seviyede `app_network` ağının tanımını yaparız.

`.env` Dosyasının Oluşturulması

Güvenlik ve esneklik açısından, hassas bilgileri (`POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD`) doğrudan `docker-compose.yml` dosyasına yazmak yerine ayrı bir `.env` dosyasında tutmak en iyi uygulamadır. `.env` dosyasını `docker-compose.yml` ile aynı dizine oluşturun ve aşağıdaki içeriği ekleyin:

POSTGRES_DB=mydatabase
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mysupersecretpassword

Önemli: Üretim ortamlarında çok daha güçlü ve rastgele parolalar kullanmaya özen gösterin. Bu `.env` dosyasını versiyon kontrol sistemlerine (git gibi) eklemeyin. Bunun yerine, bu değişkenleri CI/CD süreçlerinizde veya sunucuya manuel olarak dağıtım yaparken güvenli bir şekilde yönetin.

PostgreSQL Konteynerini Çalıştırma

Tüm dosyaları hazırladıktan sonra, terminalinizde `postgresql-dc-rehberi` dizininde olduğunuzdan emin olun ve aşağıdaki komutu çalıştırın:

docker compose up -d

Bu komut, Docker Compose dosyasını okur, gerekli PostgreSQL imajını indirir (eğer yerel olarak yoksa), named volume’u oluşturur ve PostgreSQL konteynerini arka planda (`-d` veya `–detach`) çalıştırır.

Kurulumu Doğrulama

Konteynerin başarıyla çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

docker ps

Çıktıda `db` servisi için bir konteynerin `Up` durumda olduğunu görmelisiniz. Konteynerin loglarını incelemek isterseniz:

docker compose logs db

Loglarda “database system is ready to accept connections” gibi bir mesaj görmeniz, PostgreSQL’in başarıyla başlatıldığı anlamına gelir.

İsterseniz, host makinenizden `psql` (PostgreSQL komut satırı aracı) kullanarak veritabanına bağlanabilirsiniz:

psql -h localhost -p 5432 -U myuser -d mydatabase

Parola istendiğinde `.env` dosyasındaki `mysupersecretpassword` parolasını girin. Başarıyla bağlanırsanız, veritabanınız kullanıma hazırdır.

Veritabanını Durdurma ve Temizleme

Veritabanı konteynerini durdurmak ve oluşturulan ağı ve konteyneri kaldırmak için:

docker compose down

Önemli Not: Yukarıdaki komut verilerinizi tutan `db-data` named volume’unu silmez. Bu, bir sonraki `docker compose up` komutunda verilerinizin kalmasını sağlar. Eğer verilerinizi de tamamen silmek istiyorsanız (örneğin geliştirme ortamını sıfırlarken), aşağıdaki komutu kullanın:

docker compose down --volumes

Bu komut, konteynerleri, ağları ve ilişkili named volume’ları (`db-data` dahil) kaldırır, böylece tüm veritabanı verileriniz silinir.

Sonuç

Bu rehberle, Docker Compose kullanarak kalıcı verilere sahip, izole edilmiş ve kolay yönetilebilir bir PostgreSQL veritabanı ortamını başarıyla kurmuş olduk. Bu kurulum, geliştirme ortamlarınızı standartlaştırmanıza, test süreçlerinizi hızlandırmanıza ve üretim ortamı dağıtımlarını basitleştirmenize olanak tanır. Artık uygulamanız bu `db` servisine kolayca bağlanabilir ve veritabanı işlemlerini gerçekleştirebilir. Bir sonraki adım, uygulamanızı bu veritabanına bağlamak ve tam bir konteynerize edilmiş uygulama yığını oluşturmaktır.

Emre Karabulut
📊 Bu yazı 5 kez okundu.