Docker Genel

Dockerfile ile Çok Aşamalı Yapı (Multi-stage Build) Teknikleri

Dockerfile ile Çok Aşamalı Yapı (Multi-stage Build) Teknikleri

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.

  1. Güvenlik: İnşa ve çalışma bileşenlerini ayırmak, çalışma zamanı imajınızı daha güvenli kılar.
3. Performans: Daha küçük imajlar ağırlıklarını azaltarak, daha hızlı dağıtım ve kurulum süreçleri sağ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 builder
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o main .

Stage 2: Run

FROM alpine:latest
WORKDIR /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.

  1. Önbellek Kullanımı: Docker, katmanları önbelleğe alır. Aynı bağımlılıklar üzerinden yeniden geçmemek için bu mekanizmayı kullanın.
3. Minimal Baz İmajlar: Üçüncü partilerden alacağınız imajlar yerine, olabildiğince küçük baz imajları tercih edin.

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.