Docker Genel

Docker’da Çok Aşamalı Yapılandırma: Anlama ve Uygulama

Docker'da Çok Aşamalı Yapılandırma: Anlama ve Uygulama

Docker’da Çok Aşamalı Yapılandırma: Anlama ve Uygulama

Günümüzde modern yazılım geliştirme süreçlerinde verimliliği artırmanın yollarından biri de Docker kullanımıdır. Docker, uygulamaların izole birer konteynerde çalışmasını sağlayarak, tutarlılığı bozmadan farklı platformlarda çalışabilmesine olanak tanır. Ancak, Docker imajlarının boyutlarının büyük olması, dağıtımı ve yüklemeyi zorlaştırabilir. İşte bu problem, Docker’ın çok aşamalı yapılandırma (multi-stage build) özelliğiyle çözülebilir. Bu makalede, Docker’da çok aşamalı yapılandırma kavramını inceleyip, uygulamalı bir örnekle adım adım öğrenmeye çalışacağız.

Çok Aşamalı Yapılandırma Nedir?

Çok aşamalı yapılandırma, Dockerfile içerisinde birden fazla FROM ifadesi kullanarak, imajları katmanlar halinde oluşturmanıza imkan tanır. Bu sayede, derleme işlemleri için ayrı, çalıştırma işlemleri için ayrı katmanlar oluşturabilir ve böylelikle daha küçük boyutlu imajlar elde etmiş olursunuz. Derleme için gerekli araç ve kütüphaneleri çalıştırma imajında bulundurmanız gerekmez.

Çok Aşamalı Yapılandırmanın Avantajları

1. Küçük İmaj Boyutları: Gereksiz katmanları çalıştırma imajından çıkartarak daha küçük ve hızlı indirilip çalıştırılabilen imajlar elde edilir.

  1. Geliştirilmiş Güvenlik: Yalnızca çalıştırma aşaması için gereken gerekli dosyalar imajda tutulur. Bu, gereksiz dosyaların ve güvenli olmayan kodların konteynırlara dahil edilmesini önler.
3. Daha Az Bağımlılık: Katmanlar arası bağımsızlık sağlanır. Böylece derleme veya çalıştırma aşamasındaki bağımlılıklar birbiriyle karışmaz.

Uygulamalı Örnek

Örnek olarak, basit bir Go uygulaması için çok aşamalı bir Dockerfile hazırlayalım. Bu Dockerfile’ın amacı, uygulamayı derlemek ve ardından yalnızca çalıştırma için gerekli dosyaları son imaja dahil etmektir.

Adım 1: Derleme Aşaması

İlk aşamada, Go derleyicisini kullanarak uygulamanın derlemesini yapacağız.

Derleme aşaması

FROM golang:1.17 as builder WORKDIR /app COPY . . RUN go build -o myapp

Bu aşamada golang:1.17 imajını kullanarak Go uygulamamızı myapp adlı dosya olarak derliyoruz.

Adım 2: Çalıştırma Aşaması

İkinci aşamada, çalıştırma için daha hafif bir imaj kullanıp, sadece gerekli dosyayı içine alacağız.

Çalıştırma aşaması

FROM alpine:latest WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"]

Bu aşamada, alpine:latest imajı kullanılarak daha hafif bir yapı elde ediyoruz. Sadece myapp dosyasını kopyalayarak gereksiz hiçbir derleme aracını son imajımıza eklemiyoruz.

Dockerfile’ı Kullanma

Yukarıdaki Dockerfile dosyasını oluşturduktan sonra terminalde aşağıdaki komutu çalıştırarak imajınızı oluşturabilirsiniz:

“`bash
docker build -t my-go-app .
“`

Bu komut my-go-app adında bir Docker imajı oluşturacak ve çok aşamalı yapılandırmanın sunduğu tüm avantajları kullanarak çalışabileceksiniz.

Çok Aşamalı Yapılandırmanın Kullanım Alanları

Docker çok aşamalı yapılandırma, özellikle mikro hizmet mimarilerinde, sürekli entegrasyon ve sürekli dağıtım (CI/CD) süreçlerinde yaygın olarak kullanılır. Sunucu seçenekleriniz için bulut sunucu çözümleri veya dedicated seçenekleriyle daha iyi performans ve ölçeklenebilirlik elde edebilirsiniz.

Docker’da çok aşamalı yapılandırma kullanılarak geliştirilen optimize edilmiş imajlar, dağıtım sürecinizin hızlanmasını ve verimliliğinizin artmasını sağlar. Open Source projeleriniz için de maliyetleri düşürmek ve yönetilebilirliği artırmak adına bu yaklaşımı değerlendirebilirsiniz.