Docker Compose ile Kolay ve Taşınabilir Uygulama Yığınları Oluşturma Rehberi 
Selam sistemciler!
Bugün terminalimizde biraz "orkestrasyon" yapacağız. Tek bir `docker run` komutuyla başladığımız konteyner macerası, birden fazla servis (veritabanı, web sunucusu, önbellek sistemi) bir araya gelince biraz karmaşıklaşabiliyor. İşte tam bu noktada, hayat kurtarıcımız Docker Compose devreye giriyor. Eğer bir WordPress, Nextcloud ya da kendi geliştirdiğiniz mikroservis uygulamanızı tek bir komutla ayağa kaldırmak istiyorsanız, doğru yerdesiniz.
Docker Compose Nedir ve Neden İhtiyaç Duyarız?
Docker Compose, çok konteynerli Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Basit bir YAML dosyası (`docker-compose.yml`) kullanarak, uygulamanızın tüm servislerini, ağ ayarlarını, bağlanacak volume'leri ve daha fazlasını tek bir yerden yönetebilirsiniz.
Avantajlarına hızlıca göz atalım:
Kurulum ve İlk Adımlar
Öncelikle sisteminizde Docker'ın kurulu olduğundan emin olun. Docker Compose, modern Docker Desktop kurulumlarıyla birlikte gelir. Linux sunucular için ise ayrıca kurmanız gerekebilir.
İlk docker-compose.yml Dosyamızı Yazalım
Klasik bir örnekle başlayalım: WordPress ve MySQL. Manuel kurulumda onlarca komut gerekirken, Compose ile her şey bir dosyada.
Proje dizininizde `docker-compose.yml` adında bir dosya oluşturun ve aşağıdaki içeriği yapıştırın:
Bu dosyada neler tanımladık?
Haydi Çalıştıralım!
Dosyamız hazır. Şimdi sihirli komutumuzu çalıştıralım:
`docker-compose up -d` komutundan sonra, tarayıcınızda `
` adresine giderseniz WordPress kurulum ekranını göreceksiniz. Veritabanı bilgileri zaten tanımlı, kurulum çok hızlı ilerleyecek.
Bir Adım Ötesi: Ortam Değişkenleri Dosyası (.env) ile Güvenlik
Yukarıdaki örnekte şifreleri dosya içine yazdık. Bu, özellikle dosyayı Git'e koyacaksak güvenli değil. En iyi uygulama, hassas bilgileri bir `.env` dosyasına koymaktır.
`docker-compose.yml` dosyamızın yanına `.env` adında bir dosya oluşturalım:
Şimdi `docker-compose.yml` dosyasını, bu değişkenleri okuyacak şekilde güncelleyelim:
Artık `docker-compose up` komutu, `.env` dosyasındaki değerleri otomatik olarak yükleyecek. `.env` dosyasını `.gitignore` listenize eklemeyi unutmayın!
Özet ve Sonraki Adımlar
Gördüğünüz gibi, Docker Compose ile karmaşık uygulama yığınlarını yönetmek inanılmaz derecede kolaylaşıyor.
Bu temel bilgilerle artık:
Bir sonraki aşamada, `docker-compose.override.yml` dosyalarıyla farklı ortamlar (dev/prod) için yapılandırmalar yapabilir, veya Docker Swarm / Kubernetes gibi daha gelişmiş orkestratörlere geçiş için bu yapılandırmayı temel alabilirsiniz.
Peki siz Docker Compose'u hangi projelerinizde kullanıyorsunuz? Ya da "Keşke şu uygulamanın Compose dosyası olsa" dediğiniz bir servis var mı? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!

Selam sistemciler!
Docker Compose Nedir ve Neden İhtiyaç Duyarız?
Docker Compose, çok konteynerli Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Basit bir YAML dosyası (`docker-compose.yml`) kullanarak, uygulamanızın tüm servislerini, ağ ayarlarını, bağlanacak volume'leri ve daha fazlasını tek bir yerden yönetebilirsiniz.
Avantajlarına hızlıca göz atalım:
- Tek Komut, Tüm Servisler: `docker-compose up -d` ile tüm yığınınız (stack) ayağa kalkar. `docker-compose down` ile hepsi temizlenir.
- Taşınabilirlik: `docker-compose.yml` dosyanızı Git'te saklayın. Aynı ortamı geliştirme, test ve production'da kolayca oluşturun. "Benim makinemde çalışıyordu" derdi tarih olur.
- Yapılandırma Merkezileştirme: Tüm servis bağlantıları, port mapping'leri, environment değişkenleri tek dosyada. Karışıklığa son!
- Hız ve Verimlilik: Manuel olarak her konteyneri tek tek koşturmak ve birbirine bağlamakla vakit kaybetmezsiniz.
Kurulum ve İlk Adımlar
Öncelikle sisteminizde Docker'ın kurulu olduğundan emin olun. Docker Compose, modern Docker Desktop kurulumlarıyla birlikte gelir. Linux sunucular için ise ayrıca kurmanız gerekebilir.
Bash:
# Docker Compose'u indirip kurmak için (Linux)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Kurulumu doğrulayalım
docker-compose --version
İlk docker-compose.yml Dosyamızı Yazalım
Klasik bir örnekle başlayalım: WordPress ve MySQL. Manuel kurulumda onlarca komut gerekirken, Compose ile her şey bir dosyada.
Proje dizininizde `docker-compose.yml` adında bir dosya oluşturun ve aşağıdaki içeriği yapıştırın:
YAML:
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wp_mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: guclu_bir_root_sifresi
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: guclu_bir_user_sifresi
volumes:
- db_data:/var/lib/mysql
networks:
- wp_network
wordpress:
image: wordpress:latest
container_name: wp_app
restart: unless-stopped
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: guclu_bir_user_sifresi
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_content:/var/www/html/wp-content
ports:
- "8080:80"
networks:
- wp_network
volumes:
db_data:
wp_content:
networks:
wp_network:
driver: bridge
Bu dosyada neler tanımladık?
- version: Compose dosya formatı versiyonu.
- services: Çalıştıracağımız konteynerler (db ve wordpress).
- image: Hangi Docker imajını kullanacağız.
- environment: Konteyner içine aktarılacak ortam değişkenleri (şifreler, veritabanı isimleri).
- volumes: Kalıcı verilerimizi saklayacağımız Docker volume'leri. Konteyner silinse bile veriler korunur.
- networks: Servislerin birbiriyle iletişim kurabileceği özel bir ağ oluşturduk. WordPress, `db` hostname'i ile MySQL'e erişebilir.
- ports: WordPress konteynerinin 80 portunu, sunucumuzun 8080 portuna yayınladık.
- depends_on: WordPress servisinin, db servisi başladıktan sonra başlamasını sağlar.
Haydi Çalıştıralım!
Dosyamız hazır. Şimdi sihirli komutumuzu çalıştıralım:
Bash:
# Tüm servisleri arka planda (detached mode) başlat
docker-compose up -d
# Çalışan servislerin durumunu görelim
docker-compose ps
# Servislerin loglarını takip etmek için (Ctrl+C ile çıkılır)
docker-compose logs -f wordpress
# Her şeyi durdurup, konteynerleri, ağı silmek için (volume'ler silinmez!)
docker-compose down
# Konteynerleri VE volume'leri silmek için (Dikkat! Veriler gider)
docker-compose down -v
`docker-compose up -d` komutundan sonra, tarayıcınızda `
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
Bir Adım Ötesi: Ortam Değişkenleri Dosyası (.env) ile Güvenlik
Yukarıdaki örnekte şifreleri dosya içine yazdık. Bu, özellikle dosyayı Git'e koyacaksak güvenli değil. En iyi uygulama, hassas bilgileri bir `.env` dosyasına koymaktır.
`docker-compose.yml` dosyamızın yanına `.env` adında bir dosya oluşturalım:
Bash:
MYSQL_ROOT_PASSWORD=cok_gizli_root_parola
MYSQL_PASSWORD=cok_gizli_user_parola
Şimdi `docker-compose.yml` dosyasını, bu değişkenleri okuyacak şekilde güncelleyelim:
YAML:
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Artık `docker-compose up` komutu, `.env` dosyasındaki değerleri otomatik olarak yükleyecek. `.env` dosyasını `.gitignore` listenize eklemeyi unutmayın!
Özet ve Sonraki Adımlar
Gördüğünüz gibi, Docker Compose ile karmaşık uygulama yığınlarını yönetmek inanılmaz derecede kolaylaşıyor.
- Kendi geliştirme ortamlarınızı kolayca kurabilir,
- Hızlı demo/test ortamları oluşturabilir,
- Production için bile daha yönetilebilir deployment süreçleri tasarlayabilirsiniz.
Bir sonraki aşamada, `docker-compose.override.yml` dosyalarıyla farklı ortamlar (dev/prod) için yapılandırmalar yapabilir, veya Docker Swarm / Kubernetes gibi daha gelişmiş orkestratörlere geçiş için bu yapılandırmayı temel alabilirsiniz.
Peki siz Docker Compose'u hangi projelerinizde kullanıyorsunuz? Ya da "Keşke şu uygulamanın Compose dosyası olsa" dediğiniz bir servis var mı? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!