Docker Compose Nedir?
Docker Compose, Docker konteynerlerini tanımlamanın ve çalıştırmanın bir yoludur. Yalnızca bir `docker-compose.yml` dosyası oluşturarak, farklı servisleri, ağları ve hacimleri tanımlayabilirsiniz. Bu, her bir servisi manuel olarak başlatmak yerine tek bir komutla tüm sisteminizi başlatmanıza olanak tanır. Özellikle mikro hizmet mimarilerinde, uygulamaların bağımsız servislere ayrıldığı projelerde, Docker Compose çok faydalıdır.
Docker Compose kullanmaya başlamak için öncelikle Docker'ı sisteminize kurmuş olmanız gerekir. Eğer Docker'ınız yüklü değilse, [Docker'ın resmi sitesinden](https://www.docker.com/get-started) Docker'ı indirip kurabilirsiniz.
# Docker Compose Dosyasının Oluşturulması
Bir proje başlatmak için öncelikle `docker-compose.yml` adlı bir dosya oluşturmanız gerekiyor. Bu dosya, hangi servislerin çalışacağını, her servisin hangi görüntüyü kullanacağını ve servisin hangi portlardan erişileceğini tanımlar.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
Yukarıdaki dosyada, iki servis tanımlanmıştır: `web` ve `db`. `web`, Nginx konteynerini kullanırken, `db` ise PostgreSQL servisini çalıştırmaktadır.
Docker Compose Komutları
Docker Compose ile en temel işlemler birkaç komutla yapılabilir. Bunlar, tüm projeyi yönetmek için en çok kullanılan komutlardır.
Bu komut, tanımlı tüm servisleri başlatır. Eğer servislerin arka planda çalışmasını istiyorsanız, `-d` bayrağını ekleyebilirsiniz:
docker-compose up -d
# 2. `docker-compose down`
Servislerinizi durdurmak ve kaldırmak için kullanılır. Tüm konteynerleri ve ilgili ağları temizler.
docker-compose down
# 3. `docker-compose logs`
Konteynerlerin loglarını görmek için bu komut kullanılır. Hangi konteynerin hata verdiğini hızlıca görmek için idealdir.
docker-compose logs
Docker Compose ile Daha İleri Düzey Özellikler
Docker Compose, yalnızca birkaç servisi çalıştırmanın ötesine geçer. Çok daha kapsamlı ve güçlü özellikler sunar.
Birçok servis ortam değişkenlerine ihtiyaç duyar. Bu değişkenleri `docker-compose.yml` dosyasındaki `environment` kısmında tanımlayabilirsiniz. Örneğin:
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
POSTGRES_USER: myuser
# Ağlar ve Hacimler
Birden fazla servisin birbirleriyle iletişim kurabilmesi için özel ağlar tanımlayabilirsiniz. Aynı zamanda verilerin kalıcılığı için hacimler (volumes) de kullanabilirsiniz.
version: '3.8'
services:
web:
image: nginx:latest
volumes:
- ./web:/usr/share/nginx/html
db:
image: postgres:latest
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Docker Compose ile Çalışırken Karşılaşılabilecek Yaygın Hatalar
YAML dosyaları çok hassastır ve her indentation (girinti) doğru olmalıdır. Küçük bir hata bile, Docker Compose'un doğru çalışmamasına neden olabilir.
# Hata 2: Port Çakışmaları
Bir konteynerin dışa açtığı port başka bir konteynerle çakışıyorsa, Docker Compose servislerini başlatırken hata alabilirsiniz. Portları benzersiz şekilde tanımlamak önemlidir.
Bazı servislerin, diğer servisler başlamadan önce çalışması gerekebilir. Bu gibi durumlar için `depends_on` özelliğini kullanarak servislerin başlama sırasını kontrol edebilirsiniz.
### Sonuç
Docker Compose, birden fazla konteyneri yönetmenin en verimli yollarından birisidir. Gelişmiş özellikleri, basit komutları ve esnek yapısıyla Docker ile çalışmayı çok daha kolay hale getirir. Projelerinizi daha düzenli ve yönetilebilir kılmak için Docker Compose’u hemen kullanmaya başlayabilirsiniz!