Docker’ın ENTRYPOINT
komutu, konteynerinizin ana işlemini tanımlamak için güçlü bir araçtır. CMD
komutuyla birlikte kullanımına hakim olmak, sağlam ve tekrar kullanılabilir Docker imajları oluşturmak için şarttır. Bu makale ENTRYPOINT
‘i ve pratik uygulamalarını ele almaktadır.
İçerik Tablosu
ENTRYPOINT
Komutunu AnlamakENTRYPOINT
‘e Argüman GeçirmekENTRYPOINT
veCMD
: Detaylı Karşılaştırma- Pratik Örnekler ve En İyi Uygulamalar
- Sonuç
ENTRYPOINT
Komutunu Anlamak
Bir Dockerfile içindeki ENTRYPOINT
komutu, bir konteyner başlatıldığında çalıştırılan birincil yürütülebilir dosyayı belirtir. Konteynerin temel işlevselliğini tanımlar. CMD
‘nin aksine, ENTRYPOINT
‘e verilen argümanlar docker run
komutlarıyla geçersiz kılınmaz; bunun yerine çalışma zamanı argümanlarıyla birleştirilirler. Bu, çalışma zamanı özelleştirmesine olanak tanırken tutarlı ve tahmin edilebilir bir temel işlem sağlar.
Örneğin, bir web sunucusu imajı şunu kullanabilir:
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Bu, konteyner nasıl başlatılırsa başlatılsın Apache’nin ön planda çalışmasını garanti eder. -D FOREGROUND
argümanları imajın kendisine özgüdür.
ENTRYPOINT
‘e Argüman Geçirmek
ENTRYPOINT
‘in gerçek gücü, docker run
komutundan argüman kabul etme yeteneğinde yatmaktadır. Bunlar ENTRYPOINT
komutuna eklenir ve imajı değiştirmeden özelleştirme olanağı sağlar.
Bu Dockerfile
‘ı ele alalım:
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["echo $1 && date"]
docker run my-image "ENTRYPOINT'ten Merhaba!"
çalıştırıldığında, “ENTRYPOINT’ten Merhaba!” yazısı ardından geçerli tarih ve saat yazdırılır. “ENTRYPOINT’ten Merhaba!” argümanı kabuğa geçirilir ve echo
komutu tarafından yürütülür. CMD
‘den gelen date
komutu da yürütülür.
Daha gelişmiş bir örnek, bir port numarası alan bir komut dosyasıdır:
#!/bin/bash
PORT="${1:-8080}" # Argüman verilmezse varsayılan olarak 8080 kullanılır.
echo "Sunucu $PORT portunda başlatılıyor"
# ... $PORT kullanarak sunucu mantığı ...
ENTRYPOINT
ve CMD
: Detaylı Karşılaştırma
ENTRYPOINT
ana işlemi tanımlar; CMD
bu işlem için varsayılan argümanlar sağlar. Her ikisi de mevcutsa, docker run
argümanları CMD
argümanlarını geçersiz kılarak ENTRYPOINT
komutuna eklenir. Sadece CMD
belirtilmişse, ana işlem olarak işlev görür. Temel işlevsellik için ENTRYPOINT
ve varsayılanlar veya kolayca geçersiz kılınabilir seçenekler için CMD
kullanın.
Pratik Örnekler ve En İyi Uygulamalar
Örnek 1: Basit bir Python uygulaması
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3", "my_app.py"]
Bu, Python uygulamanızı doğrudan çalıştırır. docker run
‘a verilen tüm argümanlar my_app.py
‘ye geçirilir.
Örnek 2: Daha karmaşık komutlar için kabuk kullanımı
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["npm start"]
Burada, bir kabukla başlayabilir ve ardından varsayılan (npm start
) veya docker run
‘dan geçersiz kılınan herhangi bir komutu çalıştırabilirsiniz.
En İyi Uygulamalar:
- Temel komut için
ENTRYPOINT
kullanın. - Varsayılan argümanlar veya kolayca değiştirilebilir ayarlar için
CMD
kullanın. ENTRYPOINT
komut dosyanız içindeki argümanları her zaman güvenli bir şekilde işleyin, geçerliliğini kontrol edin ve bilgilendirici hata mesajları sağlayın.
Sonuç
ENTRYPOINT
, sağlam, tekrar kullanılabilir ve uyarlanabilir konteyner imajları oluşturmayı sağlayan temel bir Docker komutudur. CMD
ile etkileşimini anlamak, etkili konteynerleştirilmiş uygulamalar geliştirmek için çok önemlidir. ENTRYPOINT
ve CMD
komutlarınızı dikkatlice oluşturarak daha güvenilir ve sürdürülebilir Docker imajları oluşturabilirsiniz.