Dockerfile Nedir?

Mert KILIÇASLAN
2 min readAug 6, 2023

--

Dockerfile, Docker imajlarının yapılandırma adımlarını içeren metin tabanlı bir dosyadır. Dockerfile, bir temel imageden başlayarak uygulamanızın çalışması için gereken tüm paketleri, bağımlılıkları ve yapılandırmaları tanımlar.

Dockerfile, container’ın nasıl oluşturulacağını adım adım tanımlar ve uygulamaların containerlara dönüştürülmesini kolaylaştırır.

Dockerfile sayesinde, aynı yapılandırmayı tekrar tekrar elle yapmak yerine, imageleri otomatik olarak oluşturabilir ve paylaşılabilir. Bu sayede uygulamalarınızın taşınabilirliği artar ve farklı ortamlarda sorunsuz bir şekilde çalışmasını sağlarsınız.

Dockerfile İçinde Temel Komutlar

  • FROM

Dockerfile’ın en temel komutu, Docker image’inin hangi temel image’den oluşacağını belirler. Çoğu Dockerfile, resmi Docker Hub imagelerinden birini temel alır.

FROM ubuntu:latest
  • RUN

Docker image’ini oluştururken çalıştırılacak komutları belirler. Paket yüklemeleri, dosya kopyalamaları ve yapılandırma adımları gibi herhangi bir komut bu şekilde tanımlanabilir.

RUN apt-get update && apt-get install -y python3
  • COPY ve ADD

Docker image’ine dosya ve dizinleri kopyalamak için kullanılır. COPY, yalnızca yerel dosya sistemindeki dosyaları kopyalarken, ADD hem yerel dosyaları hem de URL ve sıkıştırılmış dosyaları da kopyalayabilir.

COPY app.py /app/
ADD https://example.com/archive.tar.gz /data/
  • WORKDIR

Docker image içindeki çalışma dizinini belirler. Bundan sonraki diğer komutlar bu dizin üzerinde çalışır.

WORKDIR /app
  • EXPOSE

Docker container’ının hangi portunun dış dünyaya açılacağını belirler.

EXPOSE 8080
  • CMD

Docker container’ının çalıştırıldığında otomatik olarak çalıştırılacak komutları belirliyoruz. Bir Dockerfile’da yalnızca bir CMD komutu olabilir.

CMD ["python3", "app.py"]

Dockerfile Oluşturma ve Kullanımı

Bir metin düzenleyici (VS Code vb.) kullanılarak oluşturulabilir.

# Temel alınacak image
FROM python:3

# Uygulama dosyalarını /app klasörüne kopyalar
COPY app.py /app/

# Gerekli kütüphaneleri yükler
RUN pip install flask

# Çalışma dizinini /app olarak ayarlar
WORKDIR /app

# 8080 portunu dış dünyaya açar
EXPOSE 8080

# Uygulamayı çalıştırır
CMD ["python", "app.py"]

Dockerfile dosyamızı oluşturduktan sonra Dockerfile dosyamızın bulunduğu directory/dizine geçip aşağıdaki komutla image’e dönüştürebiliriz

docker build -t mert_app:latest .

Oluşturduğumuz Docker Image’inden bir container çalıştırmak için ise aşağıdaki kodu çalıştırabiliriz.

docker run -p 8080:8080 mert_app:latest

Son olarak ufak bir detay eklemek istiyorum. Dockerfile dosyasını yazarken bu dosyanın adını “Dockerfile” olarak oluşturun. Eğer “dockerfile” veya farklı bir isim koyarsanız Docker, dosyayı varsayılan adı olan “Dockerfile” olarak algılamaz ve Dockerfile olarak tanımlı işlemler çalışmaz.

Elbette farklı bir isim ile de oluşturabilirsiniz fakat hem başka kişilerin Dockerfile dosyanızı bulması zorlaşır hem de Image’e çevirme aşamasında yazacağınız kod biraz daha uzamış olur. Örneğin:

Dockerfile dosyanızın adını “mertdockerfile” olarak oluşturmak istediniz. Bu durumda Docker image’inin oluşturmak için “ — file” veya kısa hali “-f” ile dosyanın yolunu belirtmeniz gerekecektir.

docker build -t mert_app:latest -f mertdockerfile .

--

--