Docker Compose ile PostgreSQL Kurulum Rehberi
Veritabanı yönetimi, modern uygulama geliştirmenin temel taşlarından biridir. PostgreSQL, güçlü özellikleri ve sağlam yapısıyla popüler bir açık kaynak ilişkisel veritabanı sistemidir. Uygulamalarınızı geliştirirken veya dağıtırken PostgreSQL’i izole edilmiş ve yönetimi kolay bir ortamda çalıştırmak istediğinizde Docker Compose mükemmel bir çözümdür. Bu rehberde, Docker Compose kullanarak PostgreSQL veritabanını nasıl kuracağınızı adım adım inceleyeceğiz.
Neden Docker Compose ve PostgreSQL?
Docker Compose, çoklu container Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Bir YAML dosyası kullanarak, uygulamanızın tüm servislerini (veritabanı, web sunucusu, backend API vb.) tek bir komutla ayağa kaldırabilirsiniz. PostgreSQL ile birlikte kullanıldığında başlıca avantajları şunlardır:
- İzolasyon: Veritabanı ve uygulamanız ayrı container’larda çalışır, böylece bağımlılık çakışmaları önlenir.
- Taşınabilirlik: Geliştirme, test ve üretim ortamları arasında tutarlı bir veritabanı kurulumu sağlar.
- Kolay Kurulum: Karmaşık kurulum adımları yerine, basit bir YAML dosyası ile dakikalar içinde çalışır hale gelir.
- Veri Kalıcılığı: Veritabanı verilerinizi host sisteminizde kalıcı olarak depolayabilirsiniz.
Ön Koşullar
Bu rehberi takip edebilmek için sisteminizde aşağıdaki bileşenlerin kurulu olması gerekmektedir:
- Docker: Container teknolojisini çalıştıran ana platform.
- Docker Compose: Çoklu container uygulamalarını yönetmek için kullanılan araç.
Eğer henüz kurulu değillerse, resmi Docker belgelerinden kurulum yönergelerini takip edebilirsiniz.
Proje Yapısı Oluşturma
İlk adım olarak, projeniz için bir dizin oluşturalım ve bu dizine geçiş yapalım:
mkdir postgres-docker-compose
cd postgres-docker-compose
Bu dizin içinde, Docker Compose ayarlarımızı tanımlayacağımız docker-compose.yml adında bir dosya oluşturacağız.
docker-compose.yml Dosyasını Yapılandırma
Şimdi, docker-compose.yml dosyasının içeriğini oluşturalım. Bu dosya, PostgreSQL servisimizi ve veri depolaması için gerekli olan bir volume’u tanımlayacak.
version: '3.8'
services:
db:
image: postgres:14-alpine
container_name: my_postgres_db
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mysecretpassword
ports:
- "5432:5432"
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Yapılandırmanın Açıklaması:
version: '3.8': Docker Compose dosyasının versiyonunu belirtiriz. Genellikle en yeni stabil versiyonu kullanmak iyi bir uygulamadır.services:: Uygulamamızın servislerini tanımladığımız bölümdür. Burada sadecedbadında bir servisimiz var.db:: PostgreSQL veritabanı servisimizdir.image: postgres:14-alpine: PostgreSQL’in resmi Docker imajını kullanıyoruz.14-alpineetiketi, PostgreSQL sürüm 14’ün Alpine Linux tabanlı daha küçük boyutlu bir imajını kullanacağımızı belirtir.container_name: my_postgres_db: Bu servis için özel bir container adı tanımlarız. Bu, container’ı yönetmeyi kolaylaştırır.environment:: PostgreSQL container’ının başlangıcında kullanılacak ortam değişkenlerini ayarlarız.POSTGRES_DB: mydatabase: Oluşturulacak ilk veritabanının adını belirler.POSTGRES_USER: myuser: Oluşturulacak ilk süper kullanıcı adını belirler.POSTGRES_PASSWORD: mysecretpassword: Süper kullanıcının parolasını belirler. Üretim ortamlarında bu parolayı doğrudan YAML dosyasında tutmak yerine Docker secrets veya ortam değişkenlerini daha güvenli bir şekilde yöneten araçlar kullanmanız şiddetle tavsiye edilir.
ports: - "5432:5432": Host makinenizin 5432 portunu (PostgreSQL’in varsayılan portu), container’ın 5432 portuna yönlendirir. Bu sayede host makinenizden veritabanına erişebilirsiniz.volumes: - db_data:/var/lib/postgresql/data: Veritabanı verilerini kalıcı olarak depolamak için bir Docker volume’u kullanırız.db_dataadında bir volume oluşturulur ve bu volume container içindeki/var/lib/postgresql/datadizinine bağlanır. Bu sayede container silinse bile verileriniz kaybolmaz.
volumes:: Docker Compose tarafından yönetilecek volume’ları tanımladığımız bölümdür. Buradadb_dataadında bir volume tanımlanmıştır.
PostgreSQL Veritabanını Başlatma
docker-compose.yml dosyasını oluşturduktan sonra, aynı dizinde aşağıdaki komutu çalıştırarak PostgreSQL servisimizi başlatabiliriz:
docker-compose up -d
up:docker-compose.ymldosyasında tanımlanan servisleri oluşturur ve başlatır.-d: (detached mode) Servisleri arka planda çalıştırır, böylece terminaliniz serbest kalır.
Komut başarıyla çalıştıktan sonra, PostgreSQL container’ı indirilecek (eğer henüz yoksa) ve başlatılacaktır.
Kurulumu Doğrulama ve Veritabanına Bağlanma
Servisin durumunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
docker-compose ps
Çıktıda my_postgres_db container’ının durumunun Up olduğunu görmelisiniz.
Şimdi veritabanına bağlanmayı deneyelim. Container içindeki psql istemcisini kullanarak bağlanabiliriz:
docker exec -it my_postgres_db psql -U myuser -d mydatabase
Parola istendiğinde mysecretpassword girin. Başarılı bir bağlantıdan sonra, psql komut istemcisinde olduğunuzu göreceksiniz (örn: mydatabase=#). Buradan SQL sorgularınızı çalıştırabilirsiniz. Çıkmak için \q yazıp Enter’a basın.
Alternatif olarak, host makinenizden herhangi bir PostgreSQL istemcisi (örn: DBeaver, pgAdmin veya yerel psql kurulumu) kullanarak da bağlanabilirsiniz. Bağlantı detayları şu şekilde olacaktır:
- Host:
localhost(veya127.0.0.1) - Port:
5432 - Database:
mydatabase - User:
myuser - Password:
mysecretpassword
PostgreSQL Servisini Durdurma ve Kaldırma
Servisleri durdurmak için:
docker-compose down
Bu komut, container’ları durdurur ve kaldırır ancak verilerin bulunduğu volume’u korur. Yani daha sonra tekrar docker-compose up -d komutunu çalıştırdığınızda verileriniz yerinde olacaktır.
Eğer container’ları ve bunlarla ilişkili volume’ları da tamamen kaldırmak istiyorsanız (yani tüm verileri silmek isterseniz):
docker-compose down -v
Dikkat: Bu komut, veritabanı verilerinizi kalıcı olarak silecektir!
Sonuç
Bu rehberde, Docker Compose kullanarak PostgreSQL veritabanını nasıl hızlı ve etkili bir şekilde kuracağınızı öğrendiniz. Bu kurulum, geliştirme ortamlarınızda veya küçük ölçekli projelerinizde PostgreSQL’i izole ve yönetilebilir bir şekilde çalıştırmanız için ideal bir temel sağlar. Unutmayın, üretim ortamları için güvenlik önlemlerini (güçlü parolalar, Docker secrets, ağ izolasyonu vb.) gözden geçirmeyi ihmal etmeyin.
