Çok platformlu derlemeler

Orta Düzey Docker

Mike Metzger

Data Engineering Consultant

Çok platformlu?

  • Çok platformlu ne demektir?
    • Farklı işletim sistemleri
      • linux
      • windows
      • macos
    • Farklı CPU türleri
      • x64_64 veya amd64
      • arm64
      • arm7
  • Genelde os/cpu biçiminde ifade edilir; örn. linux/amd64

Linux Tux logosu

AMD64 logosu

ARM logosu

Orta Düzey Docker

Çok platformlu derlemeler oluşturma

  • Çok aşamalı derleme davranışına dayanır
  • İlk/derleme aşaması çapraz derleyiciler kullanır ve ana sistemin mimarisine dayanır
  • Son aşama hedefin mimarisini/İS'sini kullanır
Orta Düzey Docker

Çok platformlu Dockerfile seçenekleri

  • Derleme aşaması --platform=$BUILDPLATFORM bayrağını kullanır
    • $BUILDPLATFORM, derlemeyi çalıştıran ana makinenin platformunu temsil eder
  • Bazen ARG yönergesi kullanılır
    • Yerel ortam değişkenlerini Docker derleme sistemine iletir
    • Bu durumda TARGETOS ve TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Ana makine düzeyindeki ortam değişkenleri önceden tanımlanabilir veya env komutu ile ayarlanabilir
Orta Düzey Docker

Çok platformlu örnek

# İlk aşama, yerel platform kullanılır
FROM --platform=$BUILDPLATFORM golang:1.21 AS build

# Kaynakları kopyala WORKDIR /src COPY . .
# Ortam değişkenlerini ana makineden al ARG TARGETOS TARGETARCH
# ARG değişkenleri ile derle RUN env GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /final/app .
# Konteyneri oluştur ve çapraz derlenen kodu kopyala FROM alpine COPY --from=build /final/app /bin
Orta Düzey Docker

Çok platformlu derleme oluşturma

  • Çok platformlu bir derleme oluşturmak için docker build yerine çeşitli seçeneklerle docker buildx kullanmalıyız
  • docker buildx, docker build'e göre daha fazla komut ve yetenek sunar; platform belirtme seçeneği de buna dahildir

docker buildx build --platform linux/amd64,linux/arm64 -t multi-platform-app .

  • Derlemeyi çalıştırmadan önce yeni bir builder konteyneri oluşturmalıyız. Bu, docker buildx create --bootstrap --use komutu ile yapılır.
Orta Düzey Docker

Ayo berlatih!

Orta Düzey Docker

Preparing Video For Download...