Çok mimarili Docker imajları
Düzenlendi · Kapsam: Docker, Buildx ve Linux konteynerleri; AMD64 ve ARM64.
Aynı etiketten farklı işlemci mimarilerine uygun imajlar sunmak için Buildx
kullanılır. Örnekte linux/amd64 ve linux/arm64 hedeflenir.
Ön koşullar
Çalışan bir Docker kurulumu ve Buildx gerekir:
docker version
docker buildx version
Docker Desktop emülasyon desteği sunar; eski Edge kanalına geçiş gerekmez. Linux’ta destek kurulu BuildKit’e bağlıdır. Emülasyon çalışmıyorsa Docker’ın QEMU kurulum adımlarına bakın. Emülasyon altında derleme daha yavaş olabilir.
Builder oluşturma
docker buildx create --name kilavuz-builder --driver docker-container --use
docker buildx inspect --bootstrap
Platforms çıktısında iki hedefi de arayın. Aynı adlı builder zaten varsa
docker buildx use kilavuz-builder ile seçin.
Örnek Dockerfile
Boş bir çalışma dizininde Dockerfile oluşturun:
FROM alpine:3.22
CMD ["uname", "-m"]
Taban imajın hedef mimarileri desteklemesi gerekir.
Yerel deneme
Önce tek hedefi yerel imaj deposuna yükleyin:
docker buildx build --platform linux/arm64 --load -t mimari-deneme:arm64 .
docker run --rm --platform linux/arm64 mimari-deneme:arm64
Beklenen çıktı aarch64 olur. Farklı mimaride çalıştırmak için emülasyon gerekir.
Çok mimarili imajı yayımlama
docker-container çıktısı kendiliğinden yerel depoya yüklenmez. İki hedefi
birlikte bir registry’ye göndermek için aşağıdaki değişkene kendi Docker Hub
kullanıcı adınızı yazın. --push imajı hesabınıza yükler.
DOCKER_KULLANICI=hesabiniz
docker login
docker buildx build \
--platform linux/amd64,linux/arm64 \
--tag "$DOCKER_KULLANICI/mimari-deneme:1" \
--push .
docker buildx imagetools inspect "$DOCKER_KULLANICI/mimari-deneme:1"
Manifest çıktısında linux/amd64 ve linux/arm64 bulunmalıdır.
Kaynaklar ve doğrulama
Anlatım Docker çoklu platform belgesi
ve Buildx komut başvurusu
ile karşılaştırıldı. Docker Engine 29.6.2 ortamında AMD64 ve ARM64 hedeflerini
içeren yerel OCI arşivi üretildi; ARM64 imajı çalıştırıldığında aarch64 çıktısı
alındı. Registry’ye yayımlama bu depo incelemesinde denenmedi.