format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDocker Compose Nedir ve Neden Kullanılmalı?
- arrow_rightDocker Compose Temel Kavramları
- arrow_rightYAML Yapılandırma Dosyası
- arrow_rightServisler Arası İletişim
- arrow_rightGelişmiş Docker Compose Yapılandırmaları
- arrow_right1. Çoklu Ortam Yapılandırması
- arrow_right2. Bağımlılık Yönetimi
- arrow_right3. Ağ Yapılandırması
- arrow_rightVolume Yönetimi ve Veri Kalıcılığı
- arrow_rightDocker Compose vs Kubernetes Karşılaştırması
- arrow_rightProduction İçin En İyi Uygulamalar
- arrow_right1. Güvenlik Yapılandırması
- arrow_right2. Kaynak Limitleri
- arrow_right3. Log Yönetimi
- arrow_rightDocker Compose Komutları
- arrow_rightMonitoring ve Sağlık Kontrolleri
- arrow_rightSonuç
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. YAML dosyaları aracılığıyla servislerinizi, ağlarınızı ve birimlerinizi tek bir komutla yapılandırmanıza olanak tanır. Docker konteyner çevresel değişkenleri yönetimi de bu yapının önemli bir parçasıdır.
Docker'ın 2024 raporuna göre, kurumsal kullanıcların %87'si üretim ortamlarında container teknolojilerini tercih ediyor. Docker Compose ise geliştirme ortamlarında standart haline gelmiş durumda.
Docker Compose Temel Kavramları
YAML Yapılandırma Dosyası
docker-compose.yml dosyası, uygulamanızın tüm servislerini tanımlar. Her servis, bir Docker imajı veya Dockerfile içerebilir.
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
environment:
- FLASK_ENV=development
redis:
image: "redis:alpine"
Servisler Arası İletişim
Docker Compose, varsayılan olarak tüm servisleri aynı ağda çalıştırır ve servis adını hostname olarak kullanmanıza olanak tanır. Bu sayede sunucu performans testi için ortam hazırlamak oldukça kolaylaşır.
Gelişmiş Docker Compose Yapılandırmaları
1. Çoklu Ortam Yapılandırması
Geliştirme, staging ve production ortamları için farklı compose dosyaları kullanabilirsiniz:
- docker-compose.yml - Temel yapılandırma
- docker-compose.override.yml - Geliştirme ortamı için özelleştirmeler
- docker-compose.prod.yml - Production ortamı
2. Bağımlılık Yönetimi
Servislerin başlama sırasını depends_on ile kontrol edebilirsiniz:
services:
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
web:
build: .
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
interval: 10s
timeout: 5s
retries: 3
3. Ağ Yapılandırması
Özel ağlar oluşturarak servis izolasyonu sağlayabilirsiniz:
networks:
frontend:
driver: bridge
backend:
driver: bridge
services:
web:
networks:
- frontend
api:
networks:
- frontend
- backend
database:
networks:
- backend
Volume Yönetimi ve Veri Kalıcılığı
Verilerinizin kalıcılığını sağlamak için named volumes kullanın. Disk bölümleme stratejileri konusunda bilgi almak için sunucu yönetim rehberlerimizi inceleyebilirsiniz.
volumes:
postgres_data:
redis_data:
services:
postgres:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:alpine
volumes:
- redis_data:/data
Hot Reload ve Geliştirme Akışı
Geliştirme sürecini hızlandırmak için volume mounting ve bind mount kullanın:
services:
nodejs:
build:
context: .
target: development
volumes:
- ./src:/app/src
environment:
- NODE_ENV=development
command: npm run dev
Bu yapılandırma ile kaynak kodundaki değişiklikler anında container'a yansır.
Docker Compose vs Kubernetes Karşılaştırması
| Özellik | Docker Compose | Kubernetes |
|---|---|---|
| Kurulum Karmaşıklığı | Düşük | Yüksek |
| Ölçeklenebilirlik | Tek makine | Çoklu cluster |
| Öğrenme Eğrisi | Dik değil | Çok dik |
| Uygun Kullanım | Geliştirme/Test | Production |
| Otomatik Kurtarma | Yok | Var |
Production İçin En İyi Uygulamalar
1. Güvenlik Yapılandırması
Production ortamında secrets ve environment değişkenlerini güvenli yönetin:
services:
app:
image: myapp:latest
environment:
- SECRET_KEY=${SECRET_KEY}
secrets:
- db_password
secrets:
db_password:
file: ./secrets/db_password.txt
2. Kaynak Limitleri
Container kaynak tüketimini sınırlandırın:
services:
web:
image: nginx:latest
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
3. Log Yönetimi
Merkezi log toplama için logging yapılandırması ekleyin:
services:
app:
image: myapp
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Docker Compose Komutları
Temel Docker Compose komutları ve kullanım amaçları:
| Komut | Açıklama |
|---|---|
| docker-compose up -d | Tüm servisleri arka planda başlatır |
| docker-compose down | Tüm servisleri durdurur ve temizler |
| docker-compose ps | Çalışan servisleri listeler |
| docker-compose logs -f | Logları canlı izler |
| docker-compose exec web sh | Web servisine shell erişimi sağlar |
| docker-compose build | Image'ları yeniden oluşturur |
| docker-compose restart | Tüm servisleri yeniden başlatır |
Monitoring ve Sağlık Kontrolleri
Uygulama sağlığını izlemek için healthcheck ekleyin:
services:
api:
image: myapi:latest
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Sunucu güvenliği ve izleme konusunda detaylı bilgi için blog yazılarımızı inceleyebilirsiniz.
Sonuç
Docker Compose, geliştirme ortamlarınızı standardize etmek, tekrarlanabilirlik sağlamak ve ekip verimliliğini artırmak için güçlü bir araçtır. Doğru yapılandırma ile production'a yakın ortamlarda test yapabilir, web hosting çözümlerimizle entegre edebilirsiniz.
Modern yazılım geliştirme süreçlerinde container tabanlı mimariler standart haline gelmiştir. Docker Compose'u etkili kullanarak, geliştirme döngünüzü hızlandırabilir ve deployment süreçlerinizi güvenilir hale getirebilirsiniz.