Docker Compose ile PostgreSQL kurulum rehberi






Docker Compose ile PostgreSQL Kurulum Rehberi


Docker Compose ile PostgreSQL Kurulum Rehberi

Veritabanları, modern uygulamaların belkemiğini oluşturur ve bunların geliştirme ile test ortamlarında hızlı ve güvenilir bir şekilde kurulması kritik öneme sahiptir. Docker Compose, çoklu konteyner uygulamalarını tanımlamak ve çalıştırmak için mükemmel bir araçtır. Bu rehberde, Docker Compose kullanarak bir PostgreSQL veritabanını nasıl kuracağınızı, yapılandıracağınızı ve yöneteceğinizi adım adım öğreneceksiniz.

Bu kurulum, özellikle geliştirme ve küçük ölçekli test ortamları için idealdir. Veritabanınızı tamamen izole bir ortamda çalıştırmanıza, ana sisteminize herhangi bir bağımlılık yüklemeden denemeler yapmanıza ve projenizi kolayca taşınabilir hale getirmenize olanak tanır.

Önkoşullar

Başlamadan önce sisteminizde aşağıdaki bileşenlerin kurulu olduğundan emin olun:

Kurulumu doğrulamak için aşağıdaki komutları çalıştırabilirsiniz:

docker --version
docker compose version

1. Proje Dizini Oluşturma

Öncelikle projeniz için bir dizin oluşturalım ve içine girelim:

mkdir postgres-compose-example
cd postgres-compose-example

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

Bu dizinin içinde docker-compose.yml adında bir dosya oluşturun. Bu dosya, Docker Compose’a PostgreSQL servisini nasıl başlatacağını anlatacaktır.

touch docker-compose.yml

Şimdi docker-compose.yml dosyasını favori metin düzenleyicinizle açın ve aşağıdaki içeriği yapıştırın:

version: '3.8'

services:
  db:
    image: postgres:14
    restart: always
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data
      # Eğer başlangıçta veritabanına veri yüklemek isterseniz, aşağıdaki satırı etkinleştirebilirsiniz.
      # - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U myuser -d mydatabase"]
      interval: 5s
      timeout: 5s
      retries: 5
      start_period: 10s

volumes:
  db_data:

docker-compose.yml Açıklaması:

  • version: '3.8': Docker Compose dosya formatının sürümünü belirtir.
  • services:: Uygulamanızın servislerini tanımladığımız bölümdür.
  • db:: PostgreSQL veritabanı servisimizin adıdır. Uygulamanızda bu servise bu isimle erişeceksiniz.
  • image: postgres:14: Kullanılacak Docker imajını belirtir. Burada PostgreSQL’in 14. sürümünü kullanıyoruz. İhtiyacınıza göre sürümü değiştirebilirsiniz.
  • restart: always: Konteynerin bir hata durumunda veya Docker daemon yeniden başlatıldığında otomatik olarak yeniden başlatılmasını sağlar.
  • environment:: Konteyner içindeki ortam değişkenlerini ayarlar.
    • POSTGRES_DB: Oluşturulacak ilk veritabanının adıdır.
    • POSTGRES_USER: Veritabanına bağlanmak için kullanılacak kullanıcı adıdır.
    • POSTGRES_PASSWORD: Kullanıcı için parola. Gerçek uygulamalarda bu parolanın güvenli bir şekilde yönetildiğinden (örneğin Docker secrets ile) emin olun.
  • ports: - "5432:5432": Host makinenizin 5432 portunu, konteynerin 5432 portuna yönlendirir. Böylece veritabanına dışarıdan erişebilirsiniz.
  • volumes: - db_data:/var/lib/postgresql/data: Veritabanı verilerinin kalıcı olmasını sağlar. db_data adında bir Docker volume’u oluşturulur ve PostgreSQL’in veri dizinine bağlanır. Bu sayede konteyner silinse bile verileriniz kaybolmaz.
  • healthcheck:: Konteynerin sağlık durumunu düzenli olarak kontrol eder. pg_isready komutu, PostgreSQL sunucusunun bağlantıları kabul edip etmediğini kontrol eder.
  • volumes: db_data:: Tanımlanmış volume’u oluşturur.

3. Veritabanı Başlangıç Betikleri (Opsiyonel)

Eğer veritabanı ilk başlatıldığında otomatik olarak bazı tabloları oluşturmak veya başlangıç verisi eklemek isterseniz, init.sql adında bir dosya oluşturabilirsiniz.

postgres-compose-example dizini içinde init.sql adında bir dosya oluşturun:

touch init.sql

init.sql dosyasının içine aşağıdaki gibi SQL komutları ekleyebilirsiniz:

-- init.sql
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com') ON CONFLICT (email) DO NOTHING;
INSERT INTO users (name, email) VALUES ('Jane Smith', 'jane.smith@example.com') ON CONFLICT (email) DO NOTHING;

Bu betiği kullanmak için docker-compose.yml dosyasındaki volumes bölümündeki aşağıdaki satırı etkinleştirmeniz gerekir:

      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

Bu, init.sql dosyanızı PostgreSQL imajının başlangıç betiklerini aradığı dizine kopyalar ve ilk başlatma sırasında otomatik olarak çalıştırır.

4. Servisleri Başlatma

docker-compose.yml dosyasını ve (isteğe bağlı) init.sql dosyasını kaydettikten sonra, proje dizininizde aşağıdaki komutu çalıştırarak PostgreSQL servisini başlatabilirsiniz:

docker compose up -d
  • up: docker-compose.yml dosyasında tanımlanan servisleri oluşturur ve başlatır.
  • -d: (detached mode) Servisleri arka planda çalıştırır, böylece terminalinizi kullanmaya devam edebilirsiniz.

Docker, PostgreSQL imajını indirip (eğer yerel olarak yoksa) konteyneri oluşturup başlatacaktır.

5. Kurulumu Doğrulama

Servislerin çalıştığından emin olmak için aşağıdaki komutu kullanın:

docker compose ps

Çıktıda db servisinin running (çalışıyor) durumda olduğunu görmelisiniz. Ayrıca konteynerin sağlık durumu da (health: starting, healthy) görünecektir.

NAME                         COMMAND                  SERVICE      STATUS         PORTS
postgres-compose-example-db-1   "docker-entrypoint.s…"   db           running (healthy)   0.0.0.0:5432->5432/tcp

Konteynerin loglarını kontrol etmek için:

docker compose logs db

Bu, PostgreSQL sunucusunun başlatıldığını gösteren çıktıları gösterecektir.

Veritabanına Bağlanma

PostgreSQL’e bağlanmak için çeşitli yöntemler kullanabilirsiniz:

a) Host Makinenizden psql ile Bağlanma:

Eğer host makinenizde psql kuruluysa, doğrudan bağlanabilirsiniz:

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

Parola sorulduğunda mypassword girin.

Bağlantı başarılı olursa, PostgreSQL komut istemcisinde olacaksınız. \dt komutuyla tabloları listeyebilirsiniz (eğer init.sql kullandıysanız users tablosunu görmelisiniz).

\dt

Bir sorgu çalıştırmayı deneyin:

SELECT * FROM users;

Çıkmak için \q yazın ve Enter’a basın.

b) Docker Konteyneri İçinden psql ile Bağlanma:

psql host makinenizde kurulu değilse veya konteyner ortamında bir şeyi test etmek isterseniz, doğrudan konteynerin içine bağlanabilirsiniz:

Önce PostgreSQL konteynerinin adını veya ID’sini bulun:

docker ps

Ardından, konteynerin içine bağlanın ve psql‘i çalıştırın (<container_id_or_name> yerine kendi konteynerinizin adını veya ID’sini yazın):

docker exec -it <container_id_or_name> psql -U myuser -d mydatabase

Parola sorulduğunda mypassword girin. Aynı şekilde sorgularınızı çalıştırabilirsiniz.

c) Veritabanı Yönetim Araçları (PgAdmin, DBeaver vb.):

PostgreSQL’e bağlanmak için PgAdmin, DBeaver veya DataGrip gibi GUI tabanlı araçları da kullanabilirsiniz. Bağlantı ayarları genellikle şunlar olacaktır:

  • Host: localhost
  • Port: 5432
  • User: myuser
  • Password: mypassword
  • Database: mydatabase

6. Servisleri Yönetme

Docker Compose ile servislerinizi yönetmek oldukça kolaydır:

  • Servisleri Durdurma:
    docker compose stop
    

    Bu, konteynerleri durdurur ancak kaldırmaz. Yeniden başlatıldığında verileriniz korunur.

  • Servisleri Başlatma (Durdurulduktan Sonra):
    docker compose start
    

    Daha önce durdurulan servisleri yeniden başlatır.

  • Servisleri Yeniden Başlatma:
    docker compose restart
    

    Çalışan servisleri durdurur ve yeniden başlatır.

  • Servisleri Durdurma ve Kaldırma:
    docker compose down
    

    Bu komut, konteynerleri, ağları ve varsa harici olarak belirtilen tüm kaynakları durdurur ve kaldırır. Ancak volume’lar varsayılan olarak korunur, yani verileriniz kalır.

  • Servisleri Tamamen Kaldırma (Verileriyle Birlikte):
    docker compose down -v
    

    Bu komut, docker compose down ile aynı şeyi yapar, ancak -v (veya --volumes) bayrağı sayesinde Docker volume’larını da kaldırır. Bu işlemle veritabanı verileriniz kalıcı olarak silinecektir. Dikkatli kullanın!

Sonuç

Bu rehberde, Docker Compose kullanarak bir PostgreSQL veritabanını başarıyla kurmayı, yapılandırmayı ve yönetmeyi öğrendiniz. Bu yöntem, geliştirme ve test ortamlarınız için tutarlı, izole ve taşınabilir bir veritabanı kurulumu sağlar.

İleri düzey konular için, Docker Swarm veya Kubernetes ile PostgreSQL’i dağıtma, yedekleme ve kurtarma stratejileri oluşturma, replikasyon ve daha gelişmiş güvenlik ayarları gibi konuları araştırabilirsiniz. Ancak, temel geliştirme ihtiyaçlarınız için bu kurulum oldukça yeterli olacaktır.