Docker multi-stage build (çok aşamalı build) nasıl yapılır?

Giriş

Docker, uygulama geliştirme ve dağıtım süreçlerinde popüler bir araç haline gelmiştir. Uygulama bileşenlerinin her birini ayrı konteynerlerde çalıştırarak, farklı ortamlar arasında tutarlılığı sağlar. Multi-stage build, Dockerfile içerisinde birden fazla aşama tanımlayarak uygulama inşası sürecini optimize edebilme imkanı sunar. Bu yöntem, gereksiz dosyaların ve bağımlılıkların nihai görüntüden çıkartılmasına yardımcı olur, böylece daha küçük ve daha verimli görüntüler elde edilir. Multi-stage build kullanmak, özellikle büyük uygulamalar veya karmaşık projeler için mantıklı bir yaklaşımdır.

Multi-Stage Build Nedir?

Multi-stage build, bir Dockerfile içerisinde birden fazla `FROM` talimatı kullanarak birden fazla aşama oluşturma tekniğidir. Her aşama, kendi bağımsız ortamına sahiptir ve genellikle bir uygulamanın derlenmesi veya testi gibi belirli bir amacı vardır. Son aşama, uygulamanın çalıştırılacağı son görüntü olarak belirlenirken, sadece gerekli dosyalar bu son görüntüye dahil edilir. Bu, görüntü boyutunu ve karmaşıklığını azaltır.

Neden Kullanılır?

Geleneksel bir Dockerfile yaklaşımında, uygulama geliştirirken tüm bağımlılıkların ve kaynakların nihai görüntüye dahil edilmesi gerekebilir. Ancak bu durum, görüntüleri gereksiz yere büyük hale getirebilir. Multi-stage build kullanıldığında, geliştirme sürecinde gerekli olan tüm dosyalar ve bağımlılıklar birinci aşamada işlenir ve yalnızca nihai çalıştırma için gerekli olanlar son aşamada bırakılır. Böylece daha hafif ve hızlı bir görüntü elde edilir.

Örnek Bir Multi-Stage Build

Aşağıda basit bir Go uygulaması için bir Dockerfile örneği bulunmaktadır:

“`dockerfile
İlk aşama: uygulama derlemesi
FROM golang:1.17 AS builder

WORKDIR /app
COPY . .

RUN go build -o myapp .

İkinci aşama: minimal çalışma ortamı
FROM alpine:latest

WORKDIR /app
COPY –from=builder /app/myapp .

CMD [“./myapp”]
“`

Bu örnek, bir Go uygulamasını iki aşamada inşa eder. İlk aşamada, `golang` tabanlı bir görüntü kullanılarak uygulama derlenir. Bunun ardından, `alpine` tabanlı hafif bir görüntüye geçilir ve sadece derlenmiş uygulama kopyalanır. Bu, nihai görüntüyü küçük ve hızlı yapar.

Çok Aşamalı Build Kullanımının Avantajları

1. Görüntü Boyutunun Küçülmesi: Gereksiz dosyalar ve bağımlılıklar son görüntüde yer almaz, bu da görüntü boyutunu azaltır.
2. Geliştirme Sürecinin Hızlanması: Derleme ve test adımları ayrı bir aşamada gerçekleştirildiğinden, geliştirme süreci daha akıcı olur.
3. Daha Kolay Bakım: Uygulamanın farklı aşamalarını izlemek ve yönetmek daha kolaydır. Bu sayede hangi aşamada hangi dosyaların yer aldığını görmek mümkündür.
4. Güvenlik: Son görüntüde yalnızca gerekli dosyaların bulundurulması, güvenlik açıklarının azaltılmasına da katkı sağlar.

Multi-Stage Build ile İlgili İpuçları

– İsimlendirme: Farklı aşamalar için isimler vermek, anlaşılır bir yapı oluşturur. `AS` anahtar kelimesi ile aşama isimleri belirlenebilir.
– Kopyalanacak Dosyalar: `COPY` komutunu kullanarak bir aşamadan diğerine yalnızca gerekli dosyaların aktarılması önerilir. Bu da nihai görüntünün daha temiz olmasını sağlar.
– Performans: Eğer kurulumlar arasında çok fazla veri paylaşılmıyorsa, aşamaları minimumda tutmak ve gereksiz adımlardan kaçınmak, performansı artırır.

Dikkat Edilmesi Gerekenler

Multi-stage build, çok fazla aşama eklemek uygulama derleme süresini uzatabilir. Dolayısıyla, amaca uygun olarak aşamaların sayısının ve içeriğinin dikkatli bir şekilde belirlenmesi gerekir. Ayrıca, aşamada kullanılan görüntülerin versiyonları güncel tutulmalıdır. Aksi takdirde güvenlik açıkları ve uyumluluk sorunları ortaya çıkabilir.

Sonuç

Docker multi-stage build yöntemi, geliştiricilere uygulama derleme sürecini optimize etme imkanı sağlar. Birden fazla aşamada çalışmak, uygulama görüntüsünü küçültmek ve sadece gerekli bileşenleri korumak açısından kritik bir rol oynar. Bu yöntemli bir çalışma tarzı, daha hızlı dağıtım ve daha güvenli uygulama geliştirmeye katkı sağlar. Multi-stage build, modern yazılım geliştirme süreçlerinde önemli bir yer tutar ve kullanılmaya değer bir yaklaşımdır.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

SON İÇERİKLER

İLGİNİZİ ÇEKEBİLİR