# Arm64 ve x86 sunucularda çok mimarili Docker imajları derleyin

> SSH üzerinden iki düğümlü bir Buildx derleyicisiyle Arm64 ve x86 sunucuda yerel derleyerek linux/amd64 ve linux/arm64 için tek bir Docker etiketi yayımlayın.

Zorluk: İleri

**Çok platformlu imaj**, bir `linux/amd64` ve bir `linux/arm64` varyantı içeren tek bir etikettir; Docker her sunucuda doğru olanı çeker. Bunu derlemenin en hızlı yolu yereldir: arm64 yarısı bir **Arm64 VPS veya VDS**'te, amd64 yarısı bir x86 sunucuda, tek bir **Buildx** derleyicisinin iki düğümü olarak birleştirilir. Bu rehber bunu SSH üzerinden kurar.

## Başlamadan önce

- İkisinde de Docker'ın deposundan kurulmuş Docker Engine olan bir **Arm64 VPS veya VDS** ve bir **x86 sunucu** (örneğin bir Linux VPS); bkz. [Ubuntu'ya Docker kurma](/guides/install-docker-ubuntu).
- İki sunucuda da Docker'ı kullanabilen (`docker` grubunun üyesi), SSH ile anahtarla ulaşılabilen bir kullanıcı; bkz. [SSH anahtarları](/guides/ssh-keys).
- Komutları çalıştıracağınız bir **derleme makinesi**: iki sunucudan biri ya da Docker ve Buildx kurulu kendi bilgisayarınız.
- Bir konteyner kayıt defteri hesabı; bir kez `docker login registry.example.com` ile giriş yapın.

Örneklerde x86 sunucu `203.0.113.20`, Arm64 sunucu `203.0.113.30` ve kullanıcı `builder`'dır.

## 1. adım: İki Docker motorunu SSH üzerinden erişilebilir yapın

Derleme makinesinde her sunucu için bir Docker bağlamı (context) oluşturun:

```bash
docker context create node-amd64 --docker "host=ssh://builder@203.0.113.20"
docker context create node-arm64 --docker "host=ssh://builder@203.0.113.30"
docker context ls
```

**Doğrulama:** her bağlam doğru mimariyle yanıt verir:

```bash
docker --context node-amd64 info --format '{{.Architecture}}'
docker --context node-arm64 info --format '{{.Architecture}}'
```

İlki `x86_64`, ikincisi `aarch64` yazar.

## 2. adım: İki yerel düğümlü tek bir derleyici oluşturun

```bash
docker buildx create --use --name multi node-amd64
docker buildx create --append --name multi node-arm64
docker buildx inspect --bootstrap
```

**Doğrulama:** `docker buildx inspect` biri platformları arasında `linux/amd64`, diğeri `linux/arm64` olan iki düğüm listeler.

## 3. adım: İki platformu derleyip itin

`Dockerfile` dosyanızın bulunduğu klasörde:

```bash
docker buildx build --platform linux/amd64,linux/arm64 -t registry.example.com/team/app:1.0 --push .
```

Buildx her platformu onu yerel olarak derleyen düğüme gönderir ve iki varyantı içeren tek bir etiketi iter.

**Doğrulama:**

```bash
docker buildx imagetools inspect registry.example.com/team/app:1.0
```

Çıktı `linux/amd64` ve `linux/arm64` için bildirimleri listeler.

## İkinci sunucu olmadan: emülasyon

Yalnızca bir sunucunuz varsa Buildx diğer mimariyi QEMU emülasyonu altında derleyebilir. Emülatörleri bir kez kaydedin, ardından varsayılan derleyiciyle 3. adımdaki gibi derleyin:

```bash
docker run --privileged --rm tonistiigi/binfmt --install all
```

Derlenen dillerin ve büyük imajların yerel derlemeden kat kat yavaş derlenmesini bekleyin.

## İkisinde de çalışan Dockerfile'lar yazın

- İki platform için de yayımlanmış temel imajlar kullanın (resmi imajların çoğu öyledir).
- Mimariye özel dosyaları `amd64` yazarak değil, Buildx'in sağladığı `TARGETARCH` gibi derleme argümanlarıyla indirin.
- Bilgisayarınızda derlenmiş ikili dosyaları kopyalayarak değil, imajın içindeki araç zinciriyle derleyin.

## Sorun giderme

**Bir bağlam üzerinden `permission denied while trying to connect to the Docker daemon socket`.** SSH kullanıcısı o sunucuda `docker` grubunda değil; ekleyin ve yeniden oturum açın.

**`docker buildx inspect` yalnızca bir düğüm gösteriyor.** `--append` adımı başarısız oldu; bağlam adını `docker context ls` ile kontrol edip yeniden çalıştırın.

**Bir `RUN` adımında `exec format error`.** Derleme aşaması yanlış mimari için bir ikili dosya kullanıyor, çoğunlukla indirilmiş bir dosya. Dosyayı `TARGETARCH`'a göre seçin.

**İtme `unauthorized` ile başarısız oluyor.** Derleme makinesinde kayıt defteri için `docker login` çalıştırın.

## Sonraki adımlar

- Arm64 temelleri: [Arm64 VPS ve VDS: başlangıç](/guides/arm64-servers-getting-started).
- İmajları çalıştırın: [Docker Compose temelleri](/guides/docker-compose-basics).

## Sık sorulan sorular

### Neden her şeyi QEMU emülasyonuyla derlemiyoruz?

Emülasyon ikinci bir sunucu olmadan çalışır, ama emülasyon altında derlemek kat kat yavaştır. Her mimari için bir yerel düğümle imajın her yarısı tam hızda derlenir.

### Docker Desktop gerekli mi?

Hayır. Derleme makinesinde ve iki düğümde de Ubuntu ve Debian'da Docker'ın deposundan kurulan Buildx eklentili Docker Engine yeterlidir.

### İmajlar nerede saklanır?

Bir konteyner kayıt defterinde (registry). Çok platformlu bir derleme her iki varyantı içeren tek bir bildirim listesini kayıt defterine iter; bu yüzden derleme --push ve kayıt defteri girişi gerektirir.

### Bir CI sistemi aynı derleyiciyi kullanabilir mi?

Evet. Derleme makinesindeki kendi barındırdığınız bir CI çalıştırıcısı, kullanıcısı iki düğüme de anahtarla SSH üzerinden ulaşabildiği sürece derleyiciyi adıyla kullanabilir.

---

Kaynak: <https://hyperdc.com/tr/guides/products/multi-arch-docker-images>\
Son güncelleme: 2026-10-15
