Dockerfile ile Çok Aşamalı Yapı (Multi-stage Build) Teknikleri
Günümüz yazılım geliştirme süreçlerinde, Docker farklı projeler için standartları belirleyen bir araç haline geldi. Docker, uygulamalarınızın taşınabilir ve izole edilmiş ortamlarda çalışmasına imkan tanırken, çok aşamalı yapı (multi-stage build) teknikleri ile işlemleri daha verimli hâle getiriyor. Bu yazıda, Dockerfile ile çok aşamalı yapı tekniklerini, adım adım inceleyerek uygulama geliştirme sürecinizi nasıl optimize edebileceğinizi ele alacağız.
Çok Aşamalı Yapı (Multi-stage Build) Nedir?
Çok aşamalı yapı, uygulamanızın ve onun bağımlılıklarının farklı aşamalarda inşa edilmesini sağlayan bir yöntemdir. Dockerfile içerisinde birden fazla FROM
komutu kullanarak, her bir aşamada sadece belirli işleri yapabilir ve sonunda yalnızca ihtiyacınız olan çıktıyı alabilirsiniz. Bu teknik, imaj boyutunu küçültmek ve daha temiz bir yapı elde etmek için oldukça etkilidir.
Neden Çok Aşamalı Yapı Kullanmalıyız?
1. Optimizasyon: Gereksiz dosyaların ve bağımlılıkların son imaja dahil edilmemesi, imaj boyutunu küçültür.
- Güvenlik: İnşa ve çalışma bileşenlerini ayırmak, çalışma zamanı imajınızı daha güvenli kılar.
Örnek: Basit Bir Uygulama
Aşağıda, Go dilinde yazılmış basit bir uygulamanın çok aşamalı yapısını inceleyelim:
“`dockerfile
Stage 1: Build
FROM golang:1.17 AS builderWORKDIR /app
COPY . .
RUN go mod download
RUN go build -o main .
Stage 2: Run
FROM alpine:latestWORKDIR /root/
COPY –from=builder /app/main .
CMD [“./main”] “`
Aşama Aşama Dockerfile İle Çalışma
İnşa Aşaması (Build Stage)
– Baz imaj (Base Image): İlk aşamada Go dili için resmi golang:1.17
imajı kullanılır. Bu aşamada tüm kaynak kodların yanı sıra bağımlılıklar indirilir ve uygulama derlenir.
– WORKDIR ve COPY Komutları: Çalışma dizini ayarlandıktan sonra, kaynak dosyalar çalışma dizinine kopyalanır.
– RUN Komutları: go mod download
ile bağımlılıklar indirilir ve go build
ile uygulama derlenir.
Çalışma Aşaması (Run Stage)
– Alpine İmajı: Minimum boyuta sahip alpine
imajı çalışma zamanında gereklidir. Bu sayede daha küçük bir imaj ile çalışabilirsiniz.
– COPY Komutu: Derlenen uygulama, önceki aşamadan bu aşamaya aktarılır.
– CMD Komutu: Uygulamanın çalıştırılmasını tanımlar.
Çok Aşamalı Yapının Faydaları
Bu teknik sayesinde, sadece uygulamanızı çalıştırmak için gereken minimum dosyaları içeren bir imaj elde edersiniz. Böylece, üretim ortamlarınızda daha verimli ve güvenli koşullar sağlarsınız. Özellikle bulut sunucu hizmetlerinden VDS sunucu, sanal sunucu gibi yapılandırılmış sistemlerle entegre bir şekilde çalıştığınızda, bu optimizasyonların faydasını daha belirgin hissedilir.
Dockerfile Yazımında Dikkat Edilmesi Gerekenler
1. Katman Yönetimi: Her RUN
, COPY
, ADD
komutu yeni bir katman oluşturur. Bu yüzden bunları optimize etmek önemlidir.
- Önbellek Kullanımı: Docker, katmanları önbelleğe alır. Aynı bağımlılıklar üzerinden yeniden geçmemek için bu mekanizmayı kullanın.
Bu teknikleri dikkatlice uyguladığınızda, hem geliştirme süreçlerinizdeki karmaşıklığı azaltır hem de üretim ortamlarınızda daha hızlı ve çevik yapılar elde edersiniz. Dockerfile ile çok aşamalı yapılar, sadece bir teknik değil, aynı zamanda uygulama süreçlerinizi modernize etmek için harika bir fırsattır.
İhtiyaçlarınıza göre cloud sunucu veya daha geniş çaplı dedicated sunucu çözümlerini değerlendirmek de verimliliğinizi artırabilir.