format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDocker Compose ile Gelişmiş Veritabanı ve Uygulama Yönetimi
- arrow_rightDocker Compose Nedir ve Neden Kullanılmalı?
- arrow_rightDocker Compose'un Temel Avantajları
- arrow_rightDocker Compose ile Veritabanı Yapılandırması
- arrow_rightMySQL/MariaDB Yapılandırması
- arrow_rightPostgreSQL Yapılandırması
- arrow_rightGelişmiş Ağ Yapılandırması ve Servisler Arası İletişim
- arrow_rightNetwork Oluşturma ve Yönetimi
- arrow_rightÇoklu Servis Yapılandırması
- arrow_rightÖrnek: Tam Stack Uygulama Yapılandırması
- arrow_rightReverse Proxy Yapılandırması
- arrow_rightDocker Compose vs LXC: Konteyner Teknolojileri Karşılaştırması
- arrow_rightVeritabanı Bağlantı Hataları ve Çözümleri
- arrow_rightHealth Check ve İzleme
- arrow_rightHealth Check Yapılandırması
- arrow_rightOrtam Değişkenleri ve Konfigürasyon Yönetimi
- arrow_rightÖrnek .env Dosyası
- arrow_rightVeri Kalıcılığı ve Yedekleme Stratejileri
Docker Compose ile Gelişmiş Veritabanı ve Uygulama Yönetimi
Docker Compose, modern yazılım geliştirme süreçlerinde veritabanları ve uygulamaların yönetimini kolaylaştıran güçlü bir araçtır. Bu rehberde, Docker Compose kullanarak profesyonel düzeyde veritabanı ve uygulama altyapısı oluşturmayı detaylı olarak inceleyeceğiz.
Docker Compose Nedir ve Neden Kullanılmalı?
Docker Compose, çoklu konteyner uygulamalarını tanımlamak ve çalıştırmak için kullanılan bir araçtır. Docker Compose nedir sorusunun cevabı, YAML formatında tanımlanan konfigürasyon dosyaları ile tüm servislerin tek bir komutla ayağa kaldırılabilmesidir. Yapılan araştırmalara göre, geliştiricilerin %78'i Docker Compose kullanarak geliştirme süresini %40'a varan oranlarda kısaltmaktadır.
Docker Compose'un Temel Avantajları
- Tek Komutla Çalıştırma: docker-compose up komutu ile tüm servisler başlatılır
- Bağımsızlık: Her servis kendi konteynerinde izole edilmiş şekilde çalışır
- Kolay Ölçeklendirme: Servislerin horizontal olarak ölçeklenmesi mümkündür
- Çevre Değişkeni Yönetimi: .env dosyaları ile konfigürasyon kolaylığı sağlar
Docker Compose ile Veritabanı Yapılandırması
Veritabanı yönetimi, her uygulama için kritik bir bileşendir. Docker Compose kullanarak MySQL, PostgreSQL, MongoDB ve Redis gibi popüler veritabanlarını kolayca yapılandırabilirsiniz. Özellikle InnoDB veritabanı yapılandırması konusunda Docker ortamında önemli optimizasyonlar yapılabilir.
MySQL/MariaDB Yapılandırması
Aşağıda Docker Compose ile MySQL veritabanı yapılandırmasının temel örnek kodunu inceleyebilirsiniz:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- app_network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
PostgreSQL Yapılandırması
PostgreSQL, enterprise uygulamalar için tercih edilen bir veritabanıdır. Docker ortamında PostgreSQL kullanırken kalıcı veri depolama için volume tanımlaması kritik öneme sahiptir.
Gelişmiş Ağ Yapılandırması ve Servisler Arası İletişim
Docker Compose'da ağ yapılandırması, servislerin birbirleriyle güvenli ve verimli iletişim kurmasını sağlar. Varsayılan olarak, Compose tüm servisleri aynı ağa ekler ve hostname üzerinden erişim imkânı tanır.
Network Oluşturma ve Yönetimi
Gelişmiş ağ yapılandırması için özel ağlar oluşturulabilir. Bu sayede farklı ortamlar (geliştirme, test, prodüksiyon) için izole ağlar kurulabilir.
networks:
app_network:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
database_network:
driver: bridge
internal: true
Sunucu altyapınızda ağ güvenliği için sunucu yetkilendirme ve kullanıcı grupları konfigürasyonlarını da göz önünde bulundurmanızı öneririz.
Çoklu Servis Yapılandırması
Modern uygulamalar genellikle birden fazla servis gerektirir. Tam kapsamlı bir Docker Compose dosyası ile uygulama, veritabanı, cache ve message queue servislerini tek bir yapıda yönetebilirsiniz.
Örnek: Tam Stack Uygulama Yapılandırması
version: '3.8'
services:
app:
build: .
container_name: application
depends_on:
- db
- redis
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
- REDIS_URL=redis://redis:6379
networks:
- frontend
- backend
db:
image: postgres:15
container_name: postgres_db
volumes:
- pg_data:/var/lib/postgresql/data
networks:
- backend
redis:
image: redis:7-alpine
container_name: redis_cache
networks:
- backend
nginx:
image: nginx:latest
container_name: nginx_proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- frontend
volumes:
pg_data:
mysql_data:
networks:
frontend:
driver: bridge
backend:
driver: bridge
Reverse Proxy Yapılandırması
Nginx reverse proxy kullanarak trafiği yönetmek önemlidir. Nginx reverse proxy header yönetimi konusunda detaylı bilgi alabilirsiniz.
Docker Compose vs LXC: Konteyner Teknolojileri Karşılaştırması
Konteyner teknolojileri arasında seçim yaparken projenizin gereksinimlerini değerlendirmeniz gerekir. Aşağıdaki karşılaştırma tablosu, Docker Compose ve LXC arasındaki farkları göstermektedir:
| Özellik | Docker Compose | LXC/LXD |
|---|---|---|
| İzolasyon Seviyesi | Container (Process-level) | System-level (Tam OS) |
| Kaynak Tüketimi | Düşük (~100-200MB) | Yüksek (~500MB+) |
| Başlangıç Süresi | Saniyeler | Dakikalar |
| Ölçeklenebilirlik | Çok Yüksek | Orta |
| Kullanım Alanı | Mikroservisler, Uygulama | Tam sistem, Development |
| Yönetim Kolaylığı | Kolay (YAML) | Orta (CLI) |
Daha detaylı bilgi için LXC vs Docker karşılaştırması yazımızı inceleyebilirsiniz.
Veritabanı Bağlantı Hataları ve Çözümleri
Docker Compose ortamında veritabanı bağlantı hataları sıkça karşılaşılan sorunlardandır. En yaygın hatalar ve çözümleri şunlardır:
- Connection Refused: Servislerin başlama sırası önemlidir. depends_on kullanarak servislerin doğru sırayla başlamasını sağlayın
- Authentication Failed: Kullanıcı adı ve şifrelerin .env dosyasında doğru tanımlandığından emin olun
- Network Issues: Servislerin aynı ağda olduğundan emin olun
- Volume Permissions: Volume izinlerini kontrol edin
Detaylı çözümler için Database connection refused çözümleri yazımızı okuyabilirsiniz.
Health Check ve İzleme
Production ortamlarında servislerin sağlığını izlemek kritik öneme sahiptir. Docker Compose, yerleşik healthcheck özelliği ile container sağlığını izlemeye olanak tanır.
Health Check Yapılandırması
services:
postgres:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
Harici izleme çözümleri için Uptime Robot hizmetimizi de değerlendirebilirsiniz.
Ortam Değişkenleri ve Konfigürasyon Yönetimi
Güvenli ve esnek bir konfigürasyon için ortam değişkenlerini doğru şekilde yönetmek önemlidir. .env dosyası kullanarak hassas bilgileri (şifreler, API anahtarları) Docker Compose dosyasından ayırabilirsiniz.
Örnek .env Dosyası
DB_ROOT_PASSWORD= güvenli_root_şifresi
DB_NAME=uygulama_db
DB_USER=app_user
DB_PASSWORD= güvenli_uygulama_şifresi
REDIS_PASSWORD= redis_şifresi
Alan adı ve DNS yapılandırması için alan adı kayıt hizmetlerimizden yararlanabilirsiniz.
Veri Kalıcılığı ve Yedekleme Stratejileri
Docker Compose'da veri kalıcılığı için volume'ların doğru yapılandır