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.ymldosyası, 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. Buradadbadı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_dataadı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_dataadlı 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.ymldosyasında tanımlanan servisleri (bu durumda sadecedbservisi) 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(veya127.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.
***
