Build đa nền tảng

Docker nâng cao

Mike Metzger

Data Engineering Consultant

Đa nền tảng?

  • “Đa nền tảng” nghĩa là gì?
    • Khác hệ điều hành
      • linux
      • windows
      • macos
    • Khác loại CPU
      • x64_64 hoặc amd64
      • arm64
      • arm7
  • Thường ghi dạng os/cpu, ví dụ linux/amd64

Logo Linux Tux

Logo AMD64

Logo ARM

Docker nâng cao

Tạo build đa nền tảng

  • Dựa trên cơ chế multi-stage build
  • Giai đoạn đầu/build thường dùng cross-compiler và phụ thuộc kiến trúc của máy host
  • Giai đoạn cuối dùng kiến trúc/HĐH của mục tiêu
Docker nâng cao

Tùy chọn Dockerfile cho đa nền tảng

  • Giai đoạn build dùng cờ --platform=$BUILDPLATFORM
    • $BUILDPLATFORM là nền tảng của host chạy build
  • Đôi khi dùng chỉ thị ARG
    • Truyền biến môi trường cục bộ vào hệ thống build của Docker
    • Ở đây là TARGETOSTARGETARCH
    • ARG TARGETOS TARGETARCH
    • Biến môi trường ở host có thể đặt trước hoặc dùng lệnh env
Docker nâng cao

Ví dụ đa nền tảng

# 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
Docker nâng cao

Tạo build đa nền tảng

  • Để tạo build đa nền tảng, thay vì dùng docker build, hãy dùng docker buildx với các tùy chọn tương ứng
  • docker buildx có nhiều lệnh và khả năng hơn docker build, gồm cả chỉ định nền tảng

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

  • Trước khi build, cần tạo container builder mới bằng lệnh docker buildx create --bootstrap --use
Docker nâng cao

Passons à la pratique !

Docker nâng cao

Preparing Video For Download...