Dockerfile, Docker konteynerlerinin nasıl oluşturulacağını belirten bir yapılandırma dosyasıdır. Bu dosya, yazılımların ve uygulamaların bağımlılıklarını, ortam değişkenlerini ve koşullarını içeren bir dizi komut içerir. Aşağıda, en yaygın kullanılan Dockerfile komutları açıklanmaktadır.
FROM
FROM komutu, bir Docker imajının temelini belirtir. Eğer bir Dockerfile birden fazla FROM komutu içeriyorsa, her biri yeni bir imaj katmanı oluşturur. Örneğin, bir Python uygulamasını oluşturmak için Python tabanlı bir imaj kullanılabilir:
“`
FROM python:3.9
“`
Bu komut, Python 3.9 imajını temel alarak yeni bir imaj oluşturur. Dockerfile’daki tüm diğer komutlar, bu imaja dayalı olacaktır.
RUN
RUN komutu, komut satırında çalıştırılacak komutları belirtir. Genellikle, bağımlılıkların yüklenmesi veya uygulama yapılandırmalarının yapılması gibi işlemler için kullanılır. RUN komutuyla birden fazla işlem bir arada yapılabilir:
“`
RUN apt-get update && apt-get install -y nginx
“`
Yukarıdaki örnekte, sistem güncellendikten sonra Nginx web sunucusu yüklenmektedir. RUN komutları, imaj oluşturulurken çalıştırılır ve bu nedenle imaj boyutunu etkileyebilir.
COPY
COPY komutu, yerel dosyaların Docker imajına kopyalanmasını sağlar. Bu komut, yerel dosya veya dizinlerin belirtilen hedef dizine kopyalanmasına olanak tanır. Örneğin:
“`
COPY . /app
“`
Bu komut, mevcut dizindeki tüm dosyaları `/app` dizinine kopyalar. COPY komutu, dosya sisteminin kaynaklarından kopyalama yapar.
ADD
ADD komutu, COPY komutuna benzer şekilde, yerel dosyaların Docker imajına kopyalanmasını sağlar. Ancak, ADD komutu bazı ek özellikler sunar. Örneğin, URL’lerden dosya indirme ve arşiv dosyalarını otomatik olarak çıkarma yeteneğine sahiptir. Örnek kullanım:
“`
ADD myapp.tar.gz /app
“`
Bu komut, `myapp.tar.gz` dosyasını `/app` dizinine ekler ve dosya bir arşiv dosyası olduğundan otomatik olarak çıkarır. Ancak, ADD komutunun farklı işlevselliği, kullanımını dikkatlice değerlendirmeyi gerektirir.
CMD
CMD komutu, Docker konteyneri çalıştırıldığında varsayılan olarak hangi komutun çalıştırılacağını belirtir. CMD komutu, sadece bir kez kullanılmalıdır; eğer birden fazla CMD komutu varsa, sonuncusu geçerli olacaktır. Örnek kullanım:
“`
CMD [“nginx”, “-g”, “daemon off;”]
“`
Bu komut, konteyner çalıştırıldığında Nginx’i başlatır. CMD komutu, genellikle konteynerin nasıl çalıştırılması gerektiğini tanımlamak için son aşamada kullanılır.
ENTRYPOINT
ENTRYPOINT komutu, konteyner çalıştırıldığında hangi komutun yürütüleceğini belirler. CMD ile birlikte kullanılabilir, ancak ENTRYPOINT komutu çağrıldığında her zaman kullanılacak olan komutu belirler. Örnek kullanım:
“`
ENTRYPOINT [“python”]
“`
Bu komut, konteyner çalıştırıldığında Python yorumlayıcısını başlatır. ENTRYPOINT, konteynerin davranışını belirlemek için kullanılır ve genellikle uygulama yürütme komutunu içerecektir.
ENV
ENV komutu, ortam değişkenlerini belirlemek için kullanılır. Bu değişkenler, uygulama çalışırken kullanılacak veya yapılandırılacak olan değerleri içerebilir. Örnek kullanım:
“`
ENV APP_ENV production
“`
Bu örnek, `APP_ENV` adında bir ortam değişkeni oluşturur ve değerini `production` olarak ayarlar. Ortam değişkenleri, uygulamanın yapılandırılmasında esneklik sağlayabilir.
EXPOSE
EXPOSE komutu, bir konteynerin hangi portlarını dışa açacağını belirtir. Bu komut, yalnızca bilgi amaçlıdır ve güvenlik açısından önemli bir rol oynamaz; gerçek anlamda portları açmaz. Örnek kullanım:
“`
EXPOSE 80
“`
Bu komut, 80 numaralı portun açılacağını belirtir. Bu port genellikle HTTP trafiği için kullanılır.
VOLUME
VOLUME komutu, konteynerin dışındaki verilere erişimi sağlamak için veri hacmi oluşturur. Bu komut, verilerin konteyner yaşam süresi boyunca kalıcı olmasını sağlar. Örnek kullanım:
“`
VOLUME [“/data”]
“`
Bu komut, `/data` dizinini bir veri hacmi olarak işaretler. Böylece uygulama verileri bu dizinde tutulabilir ve konteyner silinse bile veriler korunur.
ARG
ARG komutu, derleme sırasında kullanılabilecek geçici değişkenler tanımlar. Bu değişkenler, imaj oluşturulurken kullanılabilir, ancak çalıştırma süresinde erişilemez. Örnek kullanım:
“`
ARG VERSION=1.0
“`
Bu komut, `VERSION` adında bir yapı değişkeni tanımlar ve varsayılan değerini `1.0` olarak ayarlar. ARG komutu, güvenlik açısından hassas veriler için kullanılmamalıdır.
SHELL
SHELL komutu, Dockerfile içinde kullanılacak komut kabuğunu belirler. Bu komut, varsayılan olarak `/bin/sh -c` kullanılır, ancak başka bir kabuk belirtmek mümkündür. Örnek kullanım:
“`
SHELL [“/bin/bash”, “-c”]
“`
Bu komut, bir sonraki RUN, CMD veya ENTRYPOINT komutlarının `/bin/bash` kabuğunda çalıştırılacağını belirtir.
Dockerfile, bu komutları kullanarak Docker konteynerlerinin yapılandırılmasını sağlar. Her komut, uygulamanın ihtiyaçlarına göre belirli bir işlev yerine getirir ve bu sayede taşınabilir, modüler ve yönetilebilir uygulama ortamları oluşturulmasına olanak tanır. Dockerfile yazımında dikkatli olmak, imajların boyutunu ve performansını etkileyebilir, bu nedenle en iyi uygulamaların takip edilmesi önemlidir.


