Docker Compose: birkaç konteyneri birlikte başlatmak
Kısaca: Docker Compose, birkaç konteyneri, ağı ve birimi tek dosyada tanımlar ve tek komutla başlatır; geliştirmede ve küçük sunucularda veritabanlı bir web uygulaması için idealdir.
Biraz daha ayrıntılı: Bir uygulama çoğunlukla birkaç parçadan oluşur: web uygulaması, veritabanı, önbellek, ters vekil sunucu. Tekil docker run komutlarıyla bu karışır. Docker Compose her şeyi tek bir compose.yaml içinde birleştirir.
Ayrıntılı
Örnek
services:
web:
build: .
ports:
- "127.0.0.1:3000:3000"
environment:
DATABASE_URL: postgres://app:secret@db:5432/app
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: app
volumes:
- dbdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5s
volumes:
dbdata:Hizmetler birbirlerine adlarıyla ulaşır (db). Compose ortak bir ağ oluşturur.
Önemli komutlar
docker compose up -d # başlat (arka planda)
docker compose logs -f web # günlükleri izle
docker compose ps # durum
docker compose exec db psql -U app # konteynerde komut
docker compose down # durdur ve kaldır
docker compose down -v # ek olarak birimleri sil (veriler gider!)
docker compose up --build # yeniden derleEski sözdizimi: docker-compose (tireli).
Yapılandırma ve güvenlik
- Sırları depoya yazmayın:
.envdosyası (.gitignoreiçinde),env_file:veya Docker secrets. - Portları yalnızca gerektiği yerde yayımlayın; dahili hizmetleri (veritabanı) dışarıya açmayın (
127.0.0.1:veya hiç port yok). - Kalıcı veriler için birimler; yedekleri planlayın.
- Sürümleri sabitleyin (
latestyerinepostgres:16). - Kararlılık için sağlık denetimleri ve
restart: unless-stopped. - Profiller ve geçersiz kılma dosyalarıyla (
compose.override.yaml) geliştirmeyi ve üretimi ayırırsınız.
Sınırlar
Compose tek bir makinede çalışır. Birçok sunucu, otomatik ölçekleme ve dayanıklılık için Kubernetes veya Docker Swarm kullanın. Ev sunucuları ve küçük projeler için Compose genellikle idealdir. Önce Docker temellerini öğrenin, sonra Compose’u.
Ayrıca bak: Docker, Docker birimleri ve ağları, Kubernetes temelleri, Docker: port zaten ayrılmış, env dosyaları