Docker Compose
- Okunuşu
- dakır kımpouz
Kısaca
Docker Compose, web sunucusu ve veritabanı gibi birkaç container'dan oluşan uygulamaları tek bir YAML dosyası ve tek komutla tanımlayıp çalıştıran araçtır.
Docker Compose nedir?
Gerçek bir uygulama nadiren tek bir container'da çalışır. Tipik bir kurulum, uygulamanın kendisine, bir PostgreSQL veritabanına, bir Redis önbelleğine ve belki bir arka plan işçisine ihtiyaç duyar; her birinin portları, ortam değişkenleri ve depolaması vardır. Compose hepsini bir compose.yaml dosyasında tarif eder; docker compose up de bütün yığını başlatır ve container'lar ortak bir ağ üzerinde birbirine servis adıyla ulaşabilir.
Her servis çekilecek bir imajı ya da derlenecek bir klasörü belirtir; portları, ortam değişkenlerini, yeniden başlatmalardan sonra kalması gereken veriler için volume'ları, sağlık kontrollerini ve diğer servislere bağımlılıkları tanımlayabilir. docker compose down her şeyi durdurup kaldırır, logs birleşik çıktıyı gösterir, exec de çalışan bir serviste bir kabuk açar.
Compose çoğunlukla yerel geliştirme ve test için kullanılır: yeni bir geliştirici depoyu klonlar, tek bir komut çalıştırır ve herkesle aynı veritabanı sürümlerine ve ayarlarına sahip olur. Küçük, tek sunuculu dağıtımlarda ve CI hatlarında entegrasyon testlerinin ihtiyaç duyduğu bağımlılıkları başlatmak için de kullanılır.
Sık yapılan bir yanlış, Compose'un Kubernetes'in yerini aldığını düşünmektir. Compose container'ları tek bir makinede çalıştırır; bir küme genelinde zamanlama, kendi kendini iyileştirme ya da düğümler arasında kademeli güncelleme gibi yerleşik özellikleri yoktur. Birçok sunucuya yayılan production sistemleri için Kubernetes gibi bir orkestratör ya da yönetilen bir container servisi olağan seçimdir.
Önemli noktalar
- Docker Compose, çok container'lı uygulamaları tek bir YAML dosyasından çalıştırır.
- docker compose up her servisi ortak bir ağ üzerinde başlatır.
- Servisler imajları, portları, ortam değişkenlerini, volume'ları ve sağlık kontrollerini tanımlar.
- Yerel geliştirme, test ve küçük tek sunuculu kurulumlar için idealdir.
- Tek bir makinede çalışır; kümeleri Kubernetes orkestre eder.
Örnek
services:
web:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://app:secret@db:5432/app # "db" is the service name
REDIS_URL: redis://cache:6379
depends_on:
db:
condition: service_healthy
db:
image: postgres:17
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "app"]
cache:
image: redis:8
volumes:
db-data:
# docker compose up -d start everything in the background
# docker compose down stop and remove the containersSık sorulan sorular
Docker ile Docker Compose arasındaki fark nedir?
Docker tek tek container'ları derler ve çalıştırır. Docker Compose bunun üzerinde durur ve bir YAML dosyasında birlikte tanımlanan, tek bir uygulamayı oluşturan bir container grubunu çalıştırır.
Docker Compose'u production'da kullanmalı mıyım?
Tek sunucudaki küçük uygulamalar için iyi çalışabilir. Birkaç sunucu, otomatik yedeğe geçiş ya da kesintisiz kademeli güncellemeler gereken sistemler için Kubernetes ya da yönetilen bir container platformu daha uygundur.
docker-compose ile docker compose arasındaki fark nedir?
Tireli docker-compose, ilk bağımsız araçtır. Boşluklu docker compose ise Docker komut satırına eklenti olarak yerleştirilmiş daha yeni sürümdür ve bugün kullanılması gereken odur. İkisi de aynı dosya biçimini okur.
Sık karşılaştırılanlar
İlgili sayfalar
- DockerDevOps ve Bulut, s. 15Docker, bir uygulamayı ve ihtiyaç duyduğu her şeyi, her makinede aynı şekilde çalışan bir konteyner içinde paketlemeye yarayan açık kaynaklı bir platformdur.
- KonteynerDevOps ve Bulut, s. 28Konteyner, bir uygulamayı bağımlılıklarıyla paketleyip ana makinenin paylaşılan işletim sistemi çekirdeği üzerinde çalıştıran hafif, yalıtılmış bir pakettir.
- KubernetesDevOps ve Bulut, s. 30Kubernetes, konteynerli uygulamaların bir makine kümesi üzerinde dağıtılmasını, ölçeklenmesini ve yönetilmesini otomatikleştiren açık kaynaklı bir sistemdir.
- YAMLDevOps ve Bulut, s. 52YAML, parantez yerine girinti kullanan, insanın okuyabileceği bir veri biçimidir; DevOps araçlarında ve CI/CD pipeline'larında yapılandırma için yaygındır.
- Ortam DeğişkeniDevOps ve Bulut, s. 36Ortam değişkeni, programın dışında işletim sistemi ya da çalışma zamanınca ayarlanan, programın davranışını yapılandırmak için okuduğu adlandırılmış değerdir.
- Entegrasyon TestiTest ve Kalite, s. 7Entegrasyon testi, kod, veritabanı ve API gibi bir sistemin birkaç parçasının birlikte doğru çalışıp çalışmadığını kontrol eden otomatik bir testtir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin