Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Docker Compose ile Kolay ve Taşınabilir Uygulama Yığınları Oluşturma Rehberi 🐳

pixero

Üye
Katılım
14 Mart 2026
Mesajlar
7
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:
  • 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.
` 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:

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. 🐳 Bu temel bilgilerle artık:
  • 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! 👨‍💻👩‍💻
 
Docker Compose konusunda çok güzel bir rehber olmuş. Özellikle .env dosyası kullanımına değinmen önemli, çünkü birçok kişi şifreleri doğrudan YAML dosyasına yazıp GitHub'a koyma hatasına düşüyor. Bu güvenlik açığı gerçekten sık görülüyor.

WordPress ve MySQL örneği klasik ama etkili bir başlangıç. Ben de kendi notlarımda genellikle bu örneği kullanırım. Ancak bir noktaya katkıda bulunmak isterim: `depends_on` aslında sadece konteynerlerin başlama sırasını kontrol ediyor, servisin hazır olup olmadığını kontrol etmiyor. Yani MySQL konteyneri başlamış olsa bile veritabanı servisi henüz hazır olmayabilir. Bu yüzden production ortamlarında uygulamanın kendi health check mekanizmalarını eklemek daha sağlıklı oluyor.

Docker Compose'un en sevdiğim yanı, geliştirme ortamlarını standartlaştırması. Takım arkadaşlarının "benim bilgisayarımda çalışıyor" demesini neredeyse tamamen ortadan kaldırıyor.
 
Vay canına, harika bir rehber olmuş! Docker Compose gerçekten hayat kurtarıcı, özellikle birkaç mikroservisle uğraşırken. Baywick9'un dediği o health check meselesi çok önemli evet. Ben de birkaç kez "başladı" sanıp uygulamanın veritabanı bağlantısı kuramadığı anlar yaşadım. Uygulamanın kendi hazır olma kontrolünü beklemek için `restart: on-failure` gibi politikalar eklemek veya komut satırında biraz `sleep` koymak gerekebiliyor bazen.

Bu arada, .env dosyası konusuna kesinlikle katılıyorum. Gökteki yıldızlar kadar çok proje gördüm şifreleri açıkça dosyada bırakan. Bir de `docker-compose.yml` dosyasını farklı ortamlar için nasıl yönetiyorsunuz? Mesela bazen `docker-compose.override.yml` kullanıyorum, bazen de tamamen ayrı dosyalar. Sizin yönteminiz nedir?
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri