Sestavení pro více platforem

Intermediate Docker

Mike Metzger

Data Engineering Consultant

Více platforem?

  • Co znamená více platforem?
    • Různé typy OS
      • linux
      • windows
      • macos
    • Různé typy CPU
      • x64_64 nebo amd64
      • arm64
      • arm7
  • Obvykle se zapisuje jako os/cpu, např. linux/amd64

Logo Linux Tux

Logo AMD64

Logo ARM

Intermediate Docker

Vytváření sestavení pro více platforem

  • Staví na chování vícestupňového sestavení
  • Počáteční fáze obvykle využívá křížové kompilátory a závisí na architektuře hostitelského systému
  • Závěrečná fáze používá architekturu / OS cílové platformy.
Intermediate Docker

Možnosti Dockerfile pro více platforem

  • Fáze sestavení používá příznak --platform=$BUILDPLATFORM
    • $BUILDPLATFORM představuje platformu hostitele provádějícího sestavení
  • Někdy se využívá direktiva ARG
    • Předává lokální proměnné prostředí do systému sestavení Dockeru
    • V tomto případě TARGETOS a TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Proměnné prostředí na úrovni hostitele lze definovat předem nebo pomocí příkazu env.
Intermediate Docker

Příklad pro více platforem

# Initial stage, using local platform
FROM --platform=$BUILDPLATFORM golang:1.21 AS build

# Copy source into place WORKDIR /src COPY . .
# Pull the environment variables from the host ARG TARGETOS TARGETARCH
# Compile code using the ARG variables RUN env GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /final/app .
# Create container and load the cross-compiled code FROM alpine COPY --from=build /final/app /bin
Intermediate Docker

Sestavení pro více platforem

  • Pro sestavení pro více platforem musíme místo docker build použít docker buildx s příslušnými možnostmi
  • docker buildx nabízí více příkazů a funkcí než docker build, včetně možnosti určit platformu

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

  • Před spuštěním sestavení musí být přítomen nový kontejner builder. Vytvoříme ho příkazem docker buildx create --bootstrap --use.
Intermediate Docker

Pojďme si procvičit!

Intermediate Docker

Preparing Video For Download...