Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Docker Buildx ile Multi-Arch Image Derleme: AMD64 ve ARM64 için Tek Image Oluşturma

✖ Kapat
Duyuru
✖ Kapat
Duyuru

devster

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
53
Merhaba arkadaşlar, bugün sizlere modern sunucu ortamlarında, özellikle de farklı işlemci mimarilerine (AMD64 ve ARM64) sahip makinelerde hayat kurtaran bir konudan bahsedeceğim: Docker Buildx ile Multi-Arch (Çoklu Mimari) Image derleme. Örneğin, Intel/AMD sunucunuzda bir image derleyip aynı image'ı Raspberry Pi gibi ARM tabanlı cihazlarda da sorunsuzca çalıştırabilmek mümkün. Bu rehberde, tek bir komutla hem AMD64 hem de ARM64 mimarilerini destekleyen bir Docker image'ı nasıl oluşturacağımızı adım adım anlatacağım.

🔧 Buildx Nedir ve Neden Gerekli?

Docker Buildx, geleneksel `docker build` komutunun çok daha gelişmiş bir versiyonudur. En büyük özelliği, "BuildKit" teknolojisini kullanarak farklı platformlar için aynı anda image derleyebilmesidir. Manuel olarak her platform için ayrı ayrı image derlemek, etiketlemek ve birleştirmekle uğraşmanıza gerek kalmaz. Buildx ile tüm bu süreç otomatikleşir ve ortaya "manifest list" adı verilen, içinde birden fazla mimariye özel image barındıran tek bir image çıkar.

🚀 Kurulum ve Hazırlık Aşamaları

Öncelikle, Docker'ın Buildx eklentisinin kurulu olduğundan emin olalım. Genellikle Docker Desktop veya modern Docker Engine kurulumlarıyla birlikte gelir. Kontrol etmek için:

Bash:
docker buildx version

Eğer komut çalışıyorsa, devam edebiliriz. Değilse, Docker'ı güncellemeniz gerekebilir. Şimdi, multi-arch build işlemini yapabilmek için bir "builder" instance'ı oluşturacağız. Bu, build işlemini yönetecek arka plan motorudur.

Bash:
docker buildx create --name multiarch-builder --use

Oluşturduğumuz builder'ı başlatalım:

Bash:
docker buildx inspect multiarch-builder --bootstrap

Artık hazırız. Bu builder, yerel makinenizde çalışan Docker'ın yanı sıra, gerekirse konteyner içinde QEMU emülasyonunu kullanarak diğer mimarileri de simüle edebilir.

📁 Örnek Dockerfile Hazırlığı

Basit bir örnek üzerinden gidelim. Proje dizininizde aşağıdaki gibi minimal bir Dockerfile oluşturalım. Bu örnek, sadece Nginx sunucusu çalıştıracak.

Kod:
FROM nginx:alpine
COPY html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Ayrıca, ./html/index.html dosyası oluşturup içine "Merhaba Multi-Arch Dünyası!" gibi bir mesaj yazabilirsiniz. Bu, test etmemizi kolaylaştıracak.

⚠️ Dikkat Edilmesi Gerekenler

Bu noktada çok önemli bir uyarı: Kullandığınız base image'ın (nginx:alpine gibi) hedeflediğiniz TÜM mimarilerde (amd64, arm64, arm/v7 vb.) mevcut olduğundan emin olun. Aksi takdirde build başarısız olur. Docker Hub'da image sayfasındaki "Tags" kısmından hangi mimarileri desteklediğini kontrol edebilirsiniz.

⚡ Multi-Arch Image Build Komutu

Şimdi sihirli komutumuzu çalıştırma zamanı. Aşağıdaki komut, hem `linux/amd64` (normal sunucular/PC'ler) hem de `linux/arm64` (Apple Silicon, yeni Raspberry Pi'ler, AWS Graviton) mimarileri için aynı anda image derleyecek ve bu image'ları Docker Hub'daki reponuza push edecek.

Bash:
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t kullaniciadiniz/nginx-multiarch:latest \
  -t kullaniciadiniz/nginx-multiarch:v1.0 \
  --push .

Komutu parça parça açıklayalım:
`--platform`: Hangi platformlar için build yapacağımızı belirtiyoruz. Birden fazla platformu virgülle ayırabilirsiniz.
`-t`: Oluşacak image'ın etiketini (tag) belirtiyoruz. Birden fazla etiket verebilirsiniz.
`--push`: Build işlemi bittikten sonra image'ları doğrudan Docker Hub'a yükler. Eğer sadece yerelde denemek isterseniz bu parametreyi kaldırıp `--load` kullanabilirsiniz, ancak `--load` sadece tek bir platform için çalışır.
`.`: Dockerfile'ın bulunduğu dizin.

🔍 Sonuçları Doğrulama

Image'larınız başarıyla push edildiyse, Docker Hub'da veya komut satırından manifest list'i inceleyerek doğrulama yapabilirsiniz.

Bash:
docker buildx imagetools inspect kullaniciadiniz/nginx-multiarch:latest

Bu komutun çıktısında, image'ınızın altında hem "linux/amd64" hem de "linux/arm64" için ayrı ayrı "Digest" (hash) değerlerini göreceksiniz. Bu, tek bir etiketin (`latest`) altında iki farklı mimariye özel image'ın başarıyla birleştirildiğini kanıtlar.

Artık `docker pull kullaniciadiniz/nginx-multiarch:latest` komutunu bir AMD64 sunucuda veya bir ARM64 cihazda çalıştırdığınızda, Docker otomatik olarak o cihazın mimarisine uygun olan image'ı indirecek ve çalıştıracaktır.

Umarım bu rehber, farklı mimarideki sunucu ve cihazlarınızı yönetirken işinizi bir hayli kolaylaştırır. Ben şahsen hybrid ortamlarda (hem geleneksel sunucular hem de ARM tabanlı edge cihazlar) bu yöntemi sıklıkla kullanıyorum. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı platformlar eklemek (mesela `linux/arm/v7` için) veya yerel registry ile çalışmak gibi tecrübeleriniz varsa paylaşın. Sorusu olan aşağıya yazsın, elimden geldiğince yardımcı olmaya çalışırım.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri