Docker Compose ile PostgreSQL kurulum rehberi

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

Elbette, Docker Compose ile PostgreSQL kurulum rehberini içeren teknik bir blog yazısı aşağıdadır:

***

Docker Compose ile PostgreSQL: Geliştirme Ortamınızı Kolayca Kurun

Modern uygulama geliştirme süreçlerinde veritabanı kurulumu ve yönetimi, genellikle karmaşık ve zaman alıcı bir adım olabilir. Ancak Docker ve özellikle Docker Compose sayesinde, bu süreç inanılmaz derecede basitleştirilebilir ve standartlaştırılabilir. Bu rehberde, Docker Compose kullanarak bir PostgreSQL veritabanını nasıl hızlı ve güvenilir bir şekilde kuracağınızı adım adım açıklayacağız. Bu yöntem, hem geliştirme hem de test ortamları için idealdir.

Docker Compose’un veritabanı kurulumunda sunduğu başlıca avantajlar şunlardır:

  • Kolay Kurulum ve Yönetim: Tek bir dosya ile karmaşık veritabanı yapılandırmalarını tanımlayabilir ve tek bir komutla başlatabilirsiniz.
  • Ortam Taşınabilirliği: Geliştirme ekibinizin her üyesi, aynı yapılandırma dosyası sayesinde aynı veritabanı ortamına sahip olur. Bu, “benim makinemde çalışıyordu” sorununu ortadan kaldırır.
  • Versiyon Kontrolü: docker-compose.yml dosyası, uygulamanızın diğer kaynak kodları gibi versiyon kontrol sistemlerinde (Git gibi) yönetilebilir.
  • Bağımlılık Yönetimi: Uygulamanızın sadece veritabanı değil, diğer bağımlılıklarını (ön yüz, arka uç servisleri, önbellekler vb.) de aynı Compose dosyası içinde tanımlayabilirsiniz.

Ön Koşullar

Bu rehberi takip edebilmeniz için sisteminizde aşağıdaki araçların kurulu olduğundan emin olun:

  • Docker Engine: Docker kapsayıcılarını çalıştırmak için temel motor.
  • Docker Compose: Birden çok kapsayıcılı Docker uygulamalarını tanımlamak ve çalıştırmak için bir araç.

Kurulum talimatları için Docker resmi belgelerini ziyaret edebilirsiniz.

Adım 1: Proje Dizinini Oluşturma

İlk olarak, PostgreSQL kurulumunuz için bir dizin oluşturun ve bu dizine geçin. Bu, tüm Docker Compose yapılandırma dosyalarınızı düzenli tutmanıza yardımcı olacaktır.

mkdir postgres-docker-compose
cd postgres-docker-compose

Adım 2: docker-compose.yml Dosyasını Oluşturma

Şimdi, PostgreSQL servisinizin yapılandırmasını içerecek olan docker-compose.yml dosyasını oluşturacağız. Bu dosya, servisin hangi imajı kullanacağını, hangi portları dinleyeceğini, ortam değişkenlerini ve veri kalıcılığı için volume’leri tanımlar.

Aşağıdaki içeriği postgres-docker-compose dizininin içine docker-compose.yml adıyla kaydedin:

version: '3.8'

services:
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data
      # Opsiyonel: Özel PostgreSQL ayarları için
      # - ./pg_hba.conf:/etc/postgresql/pg_hba.conf:ro
      # - ./postgresql.conf:/etc/postgresql/postgresql.conf:ro

volumes:
  db_data:

Yapılandırma Dosyasının Açıklaması:

  • version: '3.8': Docker Compose dosya formatının versiyonunu belirtir. En son ve kararlı versiyonları kullanmanız önerilir.
  • services:: Tanımlayacağımız servisleri içerir. Burada db adında bir servisimiz var. Servis adını istediğiniz gibi değiştirebilirsiniz (örn. postgres_db).
  • image: postgres:15-alpine: PostgreSQL’in 15 sürümünün Alpine tabanlı hafif imajını kullanır. Alpine tabanlı imajlar daha küçüktür ve daha az kaynak tüketir. İhtiyacınıza göre farklı bir sürüm seçebilirsiniz (örn. postgres:latest, postgres:13).
  • restart: always: Kapsayıcı herhangi bir nedenle durursa otomatik olarak yeniden başlatılmasını sağlar. Bu, geliştirme ortamlarında bile kesintisiz çalışma için faydalıdır.
  • environment:: PostgreSQL için gerekli ortam değişkenlerini tanımlar. Bu değişkenler, veritabanının başlangıç yapılandırmasını belirler.
    • POSTGRES_DB: Oluşturulacak ilk veritabanının adı (örneğin, mydatabase).
    • POSTGRES_USER: Veritabanı kullanıcısının adı (örneğin, user).
    • POSTGRES_PASSWORD: Veritabanı kullanıcısının şifresi (örneğin, password). Üretim ortamlarında bu değerleri asla doğrudan dosyaya yazmayın, güvenli bir şekilde yönetin (örneğin Docker secrets veya Vault).
  • ports: - "5432:5432": Host makinenizin 5432 numaralı portunu (sol taraf), kapsayıcının 5432 numaralı PostgreSQL portuna (sağ taraf) yönlendirir. Bu sayede host makinenizden PostgreSQL’e erişebilirsiniz. Farklı bir port kullanmak isterseniz sol tarafı değiştirebilirsiniz (örn. "5433:5432").
  • volumes: - db_data:/var/lib/postgresql/data: Bu kritik bir bölümdür! Veritabanı verilerinizin kalıcılığını sağlar. db_data adında bir Docker volume’u oluşturur (veya varolanı kullanır) ve bu volume’u kapsayıcı içindeki PostgreSQL veri dizinine (/var/lib/postgresql/data) bağlar. Böylece kapsayıcı silinse bile verileriniz kaybolmaz ve bir sonraki başlatmada tekrar kullanılabilir.
  • volumes: db_data:: En altta, db_data adlı volume’u harici olarak tanımlarız. Bu, Docker’ın bu volume’u yönetmesini sağlar.

Adım 3: Docker Compose Servisini Başlatma

docker-compose.yml dosyanızı kaydettikten sonra, aynı dizinde terminalinizi açın ve aşağıdaki komutu çalıştırın:

docker compose up -d

Komutun Açıklaması:

  • docker compose up: docker-compose.yml dosyasında tanımlanan servisleri (bu durumda sadece db servisi) oluşturur ve başlatır.
  • -d (detach modu): Kapsayıcıları arka planda çalıştırır, böylece terminaliniz serbest kalır ve diğer komutları çalıştırabilirsiniz.

İlk çalıştırmada, Docker gerekli PostgreSQL imajını (postgres:15-alpine) Docker Hub’dan çekecek ve ardından kapsayıcıyı başlatacaktır. Bu işlem internet bağlantı hızınıza bağlı olarak biraz zaman alabilir.

Adım 4: Kurulumu Doğrulama

PostgreSQL kapsayıcınızın doğru bir şekilde çalıştığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

docker ps

Çıktıda db servisinizi (PostgreSQL) Up durumunda görmelisiniz. Örnek çıktı:

CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                    NAMES
a1b2c3d4e5f6   postgres:15-alpine   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:5432->5432/tcp   postgres-docker-compose-db-1

Veritabanına bağlanmayı denemek için bir GUI istemcisi (DBeaver, pgAdmin vb.) veya komut satırı aracı (psql) kullanabilirsiniz. Bağlantı bilgileri:

  • Host: localhost (veya 127.0.0.1)
  • Port: 5432
  • Database: mydatabase
  • User: user
  • Password: password

Kapsayıcı içinden psql komutu ile bağlanmak için önce kapsayıcının tam adını öğrenmeniz gerekir (docker ps çıktısından). Genellikle bu ad -- şeklinde oluşur (örn. postgres-docker-compose-db-1).

docker exec -it postgres-docker-compose-db-1 psql -U user mydatabase

Bağlandıktan sonra \dt komutuyla tablo listesini görebilir veya basit bir SQL komutu çalıştırarak veritabanının çalıştığını doğrulayabilirsiniz:

CREATE TABLE mytable (id SERIAL PRIMARY KEY, name VARCHAR(255));
INSERT INTO mytable (name) VALUES ('Test Data');
SELECT * FROM mytable;

İşiniz bittiğinde \q yazarak psql oturumundan çıkabilirsiniz.

Adım 5: Servisi Yönetme

PostgreSQL servisinizi durdurmak, yeniden başlatmak veya tamamen kaldırmak için aşağıdaki komutları kullanabilirsiniz:

Durdurma:

Kapsayıcıları durdurur ama kaldırmaz. Verileriniz kalır.

docker compose stop

Başlatma (durdurulduktan sonra):

Durdurulmuş kapsayıcıları yeniden başlatır.

docker compose start

Yeniden Başlatma:

Kapsayıcıları durdurur ve yeniden başlatır.

docker compose restart

Servisleri ve Volume’ları Kaldırma:

Servisleri durdurur, kapsayıcıları ve tanımlanmış volume’ları (veri dahil) tamamen kaldırır. Bu komutu dikkatli kullanın, çünkü -v bayrağı ile tüm verileriniz kalıcı olarak silinecektir!

docker compose down -v

Eğer sadece kapsayıcıları kaldırmak ama volume’ları (yani verileri) korumak isterseniz -v bayrağını kullanmayın:

docker compose down

İleri Düzey Kullanım (Opsiyonel)

Özel PostgreSQL Yapılandırmaları:

Eğer özel postgresql.conf veya pg_hba.conf dosyalarınız varsa, bunları host makinenizden kapsayıcıya volume olarak bağlayabilirsiniz. Yukarıdaki docker-compose.yml örneğindeki yorum satırlarını kaldırarak ve kendi yapılandırma dosyalarınızı aynı dizine koyarak kullanabilirsiniz:

    volumes:
      - db_data:/var/lib/postgresql/data
      - ./my_custom_postgresql.conf:/etc/postgresql/postgresql.conf:ro
      - ./my_custom_pg_hba.conf:/etc/postgresql/pg_hba.conf:ro

:ro eki, dosyanın kapsayıcı içinde salt okunur (read-only) olmasını sağlar.

Farklı PostgreSQL Versiyonları:

image: postgres:15-alpine yerine postgres:13, postgres:latest gibi farklı versiyon etiketlerini belirterek kolayca PostgreSQL versiyonunu değiştirebilirsiniz. Versiyon değiştirirken, mevcut volume’unuzdaki verilerin yeni versiyonla uyumlu olup olmadığını kontrol etmeniz önemlidir. Genellikle büyük versiyon değişikliklerinde (örn. 13’ten 15’e) yeni bir volume ile başlamak veya dikkatli bir geçiş (upgrade) süreci uygulamak gerekebilir.

Sonuç

Bu rehberde, Docker Compose kullanarak bir PostgreSQL veritabanını nasıl kolayca kurup yöneteceğinizi öğrendiniz. Bu yöntem, veritabanı kurulum süreçlerini basitleştirir, geliştirme ekipleri arasında tutarlılığı sağlar ve uygulamanızın bağımlılıklarını izole etmenize yardımcı olur. Artık PostgreSQL veritabanınız hazır ve uygulamanızla entegrasyon için bekliyor!

Unutmayın, bu yapılandırma temel bir geliştirme ortamı için uygundur. Üretim ortamları için güvenlik, yedekleme stratejileri, yüksek erişilebilirlik ve performans optimizasyonları gibi ek konuları göz önünde bulundurmanız gerekecektir.

***

Emre Karabulut
📊 Bu yazı 1 kez okundu.