Docker Nedir?
Docker, uygulamaların konteynerler içerisinde izole bir şekilde çalıştırılmasını sağlayan bir platformdur. Bu konteynerler, gereken tüm bileşenleri (kütüphaneler, bağımlılıklar, yapılandırmalar vb.) barındırarak uygulamaların herhangi bir ortamda sorunsuzca çalışmasına olanak tanır. Docker, geliştiricilere ve sistem yöneticilerine uygulamaları standart bir şekilde oluşturma, dağıtma ve çalıştırma imkanı sunar.
Dockerfile Nedir?
Dockerfile, bir Docker imajının nasıl oluşturulacağını belirten bir yapılandırma dosyasıdır. Bu dosya, imajın temeli olan işletim sistemi, gerekli paketler, yazılımlar ve uygulama kodu gibi bileşenleri içerir. Dockerfile içerisinde kullanılan iki önemli direktif bulunmaktadır: CMD ve ENTRYPOINT.
CMD ve ENTRYPOINT Nedir?
CMD ve ENTRYPOINT, bir Docker imajının nasıl çalıştırılacağını belirten direktiflerdir. Her ikisi de konteyner çalıştırıldığında hangi komutun yürütüleceğini tanımlar. Ancak, bazı önemli farklılıklarla birlikte gelirler.
CMD: CMD, Dockerfile içerisinde belirtilen varsayılan komut veya argümanları tanımlar. Docker konteyneri çalıştırıldığında, bu komut varsayılan olarak yürütülür. Ancak, kullanıcı konteyneri başlatırken farklı komutlar veya argümanlar geçebilir. CMD, bir konteynerin üzerinde çalıştığı varsayılan davranışı sağlar, fakat bu davranış, kullanıcı tarafından değiştirilebilir.
ENTRYPOINT: ENTRYPOINT, konteynerin çalıştırılmasını sağlayan ana komutu tanımlar ve bu komut, konteyner başlatıldığında her zaman yürütülür. ENTRYPOINT ile tanımlanan komut, kullanıcıdan sağlanan argümanlarla birlikte çalıştırılır. Bu nedenle, ENTRYPOINT kullanıldığında konteynerin her zaman belirli bir davranış sergilemesi garanti edilmiş olur.
CMD Kullanımı
CMD, Dockerfile içerisinde aşağıdaki gibi tanımlanabilir:
“`dockerfile
CMD [“executable”, “param1”, “param2”]
“`
Veya
“`dockerfile
CMD command param1 param2
“`
Bir örnek vermek gerekirse, bir Python uygulaması için CMD direktifi şu şekilde kullanılabilir:
“`dockerfile
FROM python:3.8-slim
WORKDIR /app
COPY . .
CMD [“python”, “app.py”]
“`
Bu örnekte, konteyner çalıştırıldığında varsayılan olarak `python app.py` komutu yürütülecektir. Ancak, kullanıcı konteyneri başlatırken farklı bir komut da belirleyebilir.
ENTRYPOINT Kullanımı
ENTRYPOINT, Dockerfile içerisinde aşağıdaki gibi tanımlanabilir:
“`dockerfile
ENTRYPOINT [“executable”, “param1”, “param2”]
“`
Veya
“`dockerfile
ENTRYPOINT command param1 param2
“`
Örnek bir kullanım şu şekilde olabilir:
“`dockerfile
FROM python:3.8-slim
WORKDIR /app
COPY . .
ENTRYPOINT [“python”, “app.py”]
“`
Bu durumda, `app.py` dosyasına her zaman bir Python yorumlayıcısıyla erişilecektir. Kullanıcı, oluşturulan konteyneri başlatırken ekstra argümanlar verebilir. Örneğin:
“`bash
docker run -it my-python-app arg1 arg2
“`
Bu durumda, `python app.py arg1 arg2` komutu yürütülecektir.
CMD ve ENTRYPOINT İkisini Birlikte Kullanma
CMD ve ENTRYPOINT birlikte kullanılabilir. Bu durumda, ENTRYPOINT ana komut olarak belirlenirken, CMD ise varsayılan argümanlar sağlar. Örnek bir kullanım aşağıdaki gibidir:
“`dockerfile
FROM ubuntu:20.04
ENTRYPOINT [“echo”]
CMD [“Hello, World!”]
“`
Bu örnekte, konteyner çalıştırıldığında varsayılan olarak `echo Hello, World!` komutu çağrılacaktır. Ancak kullanıcı, konteyneri çalıştırırken CMD kısmını geçerek farklı bir argüman verebilir:
“`bash
docker run my-image “Different message”
“`
Bu durumda `echo Different message` komutu yürütülecektir.
Uygulama Senaryoları
CMD ve ENTRYPOINT kullanımının nerelerde daha etkili olduğu çeşitli senaryolar ile açıklanabilir. Örneğin, sürekli çalışan bir arka plan süreci oluşturulurken ENTRYPOINT tercih edilmelidir, çünkü bu sayede konteyner her zaman belirli bir görev yapar. Diğer taraftan, uygulamanın farklı bir şekilde başlatılması gerektiğinde veya aynı imajı farklı senaryolar için kullanmak istendiğinde CMD kullanmak daha esnek bir çözüm sunar.
Sonuç
Docker imajında komut ve argüman geçişi, uygulamaları konteynerler içerisinde etkili bir şekilde yürütmenin temelini oluşturur. CMD ve ENTRYPOINT, geliştiricilere farklı düzeylerde esneklik sağlar. Doğru kullanım, uygulamanın hedeflenen çalışma biçimine göre değişiklik göstermekte olup, her iki direktifin avantajları ve dezavantajları göz önünde bulundurulmalıdır.


