Docker Compose Kullanım Kılavuzu ve Komutları

Docker Compose ile hizmetleri başlatma, durdurma, inceleme, güncelleme ve temizleme işlemleri için kapsamlı komut rehberi. Beginner/Intermediate düzey.

I
ITWISE
0 görüntülenme

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

  1. Hizmet (Service): Bir konteynerin tanımıdır. Genellikle bir uygulama, veritabanı veya API hizmetini temsil eder.
  2. 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.
  3. Compose Dosyası: Hizmetlerinizi, ağlarınızı, hacimlerinizi ve diğer yapılandırmaları tanımlayan YAML dosyasıdır. docker-compose.yml veya compose.yaml olarak adlandırılır.
  4. Bağımlılık Yönetimi: Hizmetlerinizin doğru sırayla başlamasını sağlamak için depends_on ve 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 --build bayrağı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

  1. Compose Dosyası Yönetimi: Farklı ortamlar için ayrı Compose dosyaları kullanın (örneğin, compose.dev.yaml, compose.prod.yaml).
  2. Çevre Değişkenleri: Hassas verileri .env dosyalarında saklamayın. Bunun yerine Docker Compose secrets kullanın.
  3. Sağlık Kontrolleri: Hizmetlerinizin sağlıklı bir şekilde başlamasını sağlamak için sağlık kontrolleri kullanın.
  4. Profiller: Geliştirme, test ve üretim ortamları için farklı profiller kullanın.
  5. İzleme ve Günlükler: Hizmetlerinizin durumunu ve günlüklerini düzenli olarak izleyin.

Kaynak

Linuxize