EMZETT.
Giriş yap

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 derle

Eski sözdizimi: docker-compose (tireli).

Yapılandırma ve güvenlik

  • Sırları depoya yazmayın: .env dosyası (.gitignore iç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 (latest yerine postgres: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ı