Docker Compose Nedir ve Neden Kullanılır?
Docker Compose, çoklu konteyner uygulamalarını tanımlamak, yapılandırmak ve çalıştırmak için kullanılan bir araçtır. Tek bir docker-compose.yml dosyası ile tüm hizmetlerinizi, ağlarınızı, hacimlerinizi ve değişkenlerinizi yönetebilirsiniz. Bu kılavuzda, Docker Compose'un temel ve ileri düzey komutlarını, dosya yapısını ve en iyi uygulamaları bulacaksınız.
Temel Kavramlar
- Hizmet (Service): Bir konteynerin tanımıdır. Genellikle bir uygulama, veritabanı veya API hizmetini temsil eder.
- Proje (Project): Docker Compose tarafından yönetilen tüm hizmetlerin ve kaynakların koleksiyonudur. Varsayılan olarak, proje adı bulunduğunuz dizinden alınır.
- Compose Dosyası: Hizmetlerinizi, ağlarınızı, hacimlerinizi ve diğer yapılandırmaları tanımlayan YAML dosyasıdır.
docker-compose.ymlveyacompose.yamlolarak adlandırılır. - Bağımlılık Yönetimi: Hizmetlerinizin doğru sırayla başlamasını sağlamak için
depends_onve sağlık kontrollerini kullanabilirsiniz.
Başlangıç ve Durdurma İşlemleri
Tüm Hizmetleri Başlatma
Docker Compose ile tüm hizmetleri başlatmak için aşağıdaki komutu kullanabilirsiniz:
docker compose up
Bu komut, hizmetleri arka planda çalıştırmak için -d bayrağını kullanabilirsiniz:
docker compose up -d
İpuçları ve Uyarılar
Önemli: Hizmetlerinizde değişiklik yaptıysanız, yeni değişiklikleri uygulamak için
--buildbayrağını kullanmayı unutmayın:docker compose up -d --build
Belirli Bir Hizmeti Başlatma
Yalnızca belirli bir hizmeti ve onun bağımlılıklarını başlatmak için:
docker compose up -d service_adı
Hizmetleri Durdurma ve Kaldırma
Çalışan hizmetleri durdurmak için:
docker compose stop
Durdurulan hizmetleri yeniden başlatmak için:
docker compose start
Tüm hizmetleri yeniden başlatmak için:
docker compose restart
Tüm hizmetleri ve ağları kaldırmak için:
docker compose down
Kaldırma işlemi sırasında hacimleri de silmek için:
docker compose down -v
Hizmetlerin Durumunu İnceleme ve Günlükleri Görüntüleme
Çalışan Hizmetleri Listeleme
Çalışan hizmetleri görmek için:
docker compose ps
Tüm hizmetleri (durmuş olanları da) listelemek için:
docker compose ps -a
Günlükleri Görüntüleme
Tüm hizmetlerin günlüklerini görmek için:
docker compose logs
Belirli bir hizmetin günlüklerini izlemek için:
docker compose logs -f service_adı
Son 100 satır günlüğü görmek için:
docker compose logs --tail 100 service_adı
Hizmetlerin Portlarını Kontrol Etme
Bir hizmetin hangi portunu hangi host portuna eşlediğini görmek için:
docker compose port service_adı 80
Komutları Hizmet Konteynerlerinde Çalıştırma
Konteynerlerde Komut Çalıştırma
Çalışan bir hizmetin konteynerinde komut çalıştırmak için:
docker compose exec service_adı sh
Belirli bir komutu çalıştırmak için:
docker compose exec service_adı komut
Tek Seferlik Konteynerler
Geçici bir konteyner çalıştırmak ve ardından kaldırmak için:
docker compose run --rm service_adı komut
Görüntüleri Yönetme
Görüntüleri Oluşturma
Tüm hizmetler için görüntüleri oluşturmak için:
docker compose build
Belirli bir hizmet için görüntü oluşturmak için:
docker compose build service_adı
Önbelleği kullanmadan görüntü oluşturmak için:
docker compose build --no-cache
Görüntüleri Çekme ve Pushing
Hizmetler için görüntüleri bir kayıttan çekmek için:
docker compose pull
Görüntüleri bir kayıta push etmek için:
docker compose push
Compose Dosyası Temelleri
Compose dosyası, services: anahtarından başlar ve her hizmet için aşağıdaki gibi tanımlar yapılır:
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
environment:
- NGINX_ENV=production
depends_on:
- db
db:
image: postgres:16
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Önemli Direktifler
| Direktif | Açıklama |
|---|---|
image |
Mevcut bir Docker görüntüsünü kullanır. |
build |
Belirtilen Dockerfile'dan görüntü oluşturur. |
ports |
Host ve konteyner portlarını eşler. |
volumes |
Hacimleri bağlar. |
environment |
Çevre değişkenlerini ayarlar. |
depends_on |
Hizmetlerin başlama sırasını tanımlar. |
restart |
Konteynerlerin yeniden başlatma davranışını tanımlar. |
Sağlık Kontrolleri ve Başlangıç Sırası
Hizmetlerinizin sağlıklı bir şekilde başlamasını sağlamak için sağlık kontrolleri ve bağımlılık yönetimi kullanabilirsiniz.
services:
web:
image: nginx
depends_on:
db:
condition: service_healthy
db:
image: postgres
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 5s
timeout: 3s
retries: 5
start_period: 5s
Restart Politikaları
Konteynerlerin yeniden başlatma davranışını aşağıdaki gibi tanımlayabilirsiniz:
restart: "no" # Varsayılan, yeniden başlatma
restart: always # Her zaman yeniden başlat
restart: on-failure # Başarısızlık durumunda yeniden başlat
restart: unless-stopped # Manuel olarak durdurulmadıkça yeniden başlat
Çevre Değişkenleri Yönetimi
Çevre değişkenlerini environment direktifiyle veya .env dosyalarıyla yönetebilirsiniz.
services:
web:
image: nginx
environment:
- API_KEY=${API_KEY}
- DEBUG=${DEBUG:-false}
.env dosyası, proje dizininde bulunmalıdır. Değişkenleri aşağıdaki gibi kullanabilirsiniz:
# .env dosyası
API_KEY=12345
DEBUG=true
Alternatif .env Dosyaları
Farklı ortamlar için farklı .env dosyaları kullanabilirsiniz:
docker compose --env-file .env.production up -d
Projeler ve Dosyalar
Docker Compose, compose.yaml dosyasını varsayılan olarak arar. Eğer bulunamazsa, docker-compose.yml dosyasını kullanır.
Özel bir dosya kullanmak için:
docker compose -f compose.prod.yaml up -d
Birden fazla dosyayı birleştirmek için:
docker compose -f base.yml -f override.yml up -d
Proje Adını Belirleme
Proje adını manuel olarak ayarlamak için:
docker compose -p myproject up -d
Varsayılan proje adını ayarlamak için ortam değişkenini kullanabilirsiniz:
export COMPOSE_PROJECT_NAME=myproject
# veya Windows'ta:
set COMPOSE_PROJECT_NAME=myproject
Profiller ve Ölçeklendirme
Profiller, belirli hizmetleri belirli durumlarda çalıştırmak için kullanılır.
services:
debug_service:
image: nginx
profiles:
- debug
- test
Belirli profilleri etkinleştirmek için:
docker compose --profile debug up -d
Hizmetleri ölçeklendirmek için:
docker compose up -d --scale worker=3
Temizlik ve Kaynakları Kaldırma
Proje tarafından oluşturulan kaynakları temizlemek için aşağıdaki komutları kullanabilirsiniz:
# Tüm konteynerleri ve ağları kaldır
docker compose down
# Ayrıca hacimleri de kaldır
docker compose down -v
# Ayrıca görüntüleri de kaldır
docker compose down --rmi all
# Yalnızca durmuş konteynerleri kaldır
docker compose rm
En İyi Uygulamalar
- Compose Dosyası Yönetimi: Farklı ortamlar için ayrı Compose dosyaları kullanın (örneğin,
compose.dev.yaml,compose.prod.yaml). - Çevre Değişkenleri: Hassas verileri
.envdosyalarında saklamayın. Bunun yerine Docker Compose secrets kullanın. - Sağlık Kontrolleri: Hizmetlerinizin sağlıklı bir şekilde başlamasını sağlamak için sağlık kontrolleri kullanın.
- Profiller: Geliştirme, test ve üretim ortamları için farklı profiller kullanın.
- İzleme ve Günlükler: Hizmetlerinizin durumunu ve günlüklerini düzenli olarak izleyin.


