การสร้างบิลด์หลายแพลตฟอร์ม

Docker ระดับกลาง

Mike Metzger

Data Engineering Consultant

หลายแพลตฟอร์มคืออะไร?

  • หลายแพลตฟอร์มหมายความว่าอย่างไร?
    • ประเภท OS ที่แตกต่างกัน
      • linux
      • windows
      • macos
    • ประเภท CPU ที่แตกต่างกัน
      • x64_64 หรือ amd64
      • arm64
      • arm7
  • มักเขียนในรูปแบบ os/cpu เช่น linux/amd64

โลโก้ Linux Tux

โลโก้ AMD64

โลโก้ ARM

Docker ระดับกลาง

การสร้างบิลด์หลายแพลตฟอร์ม

  • สร้างต่อยอดจากพฤติกรรมของ multi-stage build
  • ขั้นตอนแรก / ขั้นตอนบิลด์มักใช้ cross-compiler และพึ่งพาสถาปัตยกรรมของระบบโฮสต์
  • ขั้นตอนสุดท้ายใช้สถาปัตยกรรม / OS ของเป้าหมายที่ต้องการ
Docker ระดับกลาง

ตัวเลือกใน Dockerfile สำหรับหลายแพลตฟอร์ม

  • ขั้นตอนบิลด์ใช้แฟล็ก --platform=$BUILDPLATFORM
    • $BUILDPLATFORM แทนแพลตฟอร์มของโฮสต์ที่รันการบิลด์
  • บางครั้งใช้ directive ARG
    • ส่งตัวแปรสภาพแวดล้อมในเครื่องเข้าสู่ระบบบิลด์ของ Docker
    • ในกรณีนี้คือ TARGETOS และ TARGETARCH
    • ARG TARGETOS TARGETARCH
    • ตัวแปรสภาพแวดล้อมในระดับโฮสต์สามารถกำหนดไว้ล่วงหน้าหรือใช้คำสั่ง env ก็ได้
Docker ระดับกลาง

ตัวอย่างการสร้างบิลด์หลายแพลตฟอร์ม

# 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 ระดับกลาง

การบิลด์แบบหลายแพลตฟอร์ม

  • การสร้างบิลด์หลายแพลตฟอร์มต้องใช้ docker buildx พร้อมตัวเลือกต่าง ๆ แทน docker build
  • docker buildx มีคำสั่งและความสามารถมากกว่า docker build รวมถึงการระบุแพลตฟอร์มเป้าหมายได้

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

  • ก่อนรันการบิลด์ ต้องสร้างคอนเทนเนอร์ builder ใหม่ด้วยคำสั่ง docker buildx create --bootstrap --use
Docker ระดับกลาง

มาฝึกกันเถอะ!

Docker ระดับกลาง

Preparing Video For Download...