멀티 플랫폼 빌드

중급 Docker

Mike Metzger

Data Engineering Consultant

멀티 플랫폼?

  • 멀티 플랫폼의 의미는 무엇인가요?
    • 서로 다른 OS 유형
      • linux
      • windows
      • macos
    • 서로 다른 CPU 유형
      • x64_64 또는 amd64
      • arm64
      • arm7
  • 보통 os/cpu 형식으로 표기합니다. 예: linux/amd64

리눅스 턱스 로고

AMD64 로고

ARM 로고

중급 Docker

멀티 플랫폼 빌드 생성

  • 멀티 스테이지 빌드 동작을 기반으로 합니다
  • 초기/빌드 단계는 크로스 컴파일러를 사용하며 호스트 시스템의 아키텍처에 의존합니다
  • 최종 단계는 대상의 아키텍처/OS를 사용합니다
중급 Docker

멀티 플랫폼 Dockerfile 옵션

  • 빌드 단계에서 --platform=$BUILDPLATFORM 플래그를 사용합니다
    • $BUILDPLATFORM은 빌드를 실행하는 호스트의 플랫폼을 나타냅니다
  • 때로는 ARG 지시어를 사용합니다
    • 로컬 환경 변수를 Docker 빌드 시스템에 전달합니다
    • 여기서는 TARGETOSTARGETARCH입니다
    • ARG TARGETOS TARGETARCH
    • 호스트 수준 환경 변수는 미리 정의하거나 env 명령으로 설정할 수 있습니다
중급 Docker

멀티 플랫폼 예시

# 초기 단계: 로컬 플랫폼 사용
FROM --platform=$BUILDPLATFORM golang:1.21 AS build

# 소스 복사 WORKDIR /src COPY . .
# 호스트의 환경 변수 가져오기 ARG TARGETOS TARGETARCH
# ARG 변수로 컴파일 RUN env GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /final/app .
# 컨테이너 생성 및 크로스 컴파일 산출물 적재 FROM alpine COPY --from=build /final/app /bin
중급 Docker

멀티 플랫폼 빌드하기

  • 멀티 플랫폼 빌드를 만들려면 docker build 대신 다양한 옵션과 함께 docker buildx를 사용해야 합니다
  • 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...