Docker Buildx Bake Platforms 사용법 완벽 가이드! 멀티 플랫폼 이미지 빌드하기

최근 Docker 환경에서는 하나의 서버만 사용하는 것이 아니라 다양한 CPU 아키텍처 환경을 함께 사용합니다.

예:

  • Intel 서버 (amd64)
  • AMD 서버 (amd64)
  • ARM 서버 (arm64)
  • Apple Silicon Mac (arm64)
  • AWS Graviton 서버 (arm64)

이러한 환경에서는 하나의 Docker Image를 여러 플랫폼에서 실행할 수 있도록 만드는 것이 중요합니다.

Docker Buildx Bake에서는 Platforms 옵션을 사용하여 Multi-platform Image를 생성할 수 있습니다.

예:

docker-bake.hcl

target "app" {

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

  tags = [

    "company/app:v1"

  ]

}

실행:

docker buildx bake app --push

결과:

Docker Image 생성

├── linux/amd64

└── linux/arm64

↓

하나의 Image Tag 관리

이번 글에서는 Docker Buildx Bake Platforms의 개념부터 Multi-platform Build 설정, ARM 이미지 생성, CI/CD 활용, 운영 환경 적용 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake Platforms란 무엇인가?

Docker Buildx Bake Platforms는 하나의 Docker Image를 여러 CPU 플랫폼용으로 Build하는 기능입니다.

기본 Docker Build:

Dockerfile

↓

현재 PC 환경 Image 생성

예:

Intel PC에서 Build:

linux/amd64 Image

하지만 Platforms 사용:

Dockerfile

↓

Buildx

↓

linux/amd64

+

linux/arm64

↓

Multi-platform Image

하나의 Image Tag로 여러 환경을 지원할 수 있습니다.

Docker Buildx Bake Platforms가 필요한 이유

최근 서버 환경은 다양해지고 있습니다.

예:

AWS EC2

↓

amd64


AWS Graviton

↓

arm64

문제:

amd64 Image:

ARM 서버 실행 불가

arm64 Image:

Intel 서버 실행 불가

Multi-platform Image:

하나의 Tag

↓

여러 Architecture 지원

장점:

  • 다양한 서버 지원
  • 배포 편리
  • Image 관리 단순화
  • Cloud 비용 절감

Docker Buildx Bake Platforms 기본 설정

docker-bake.hcl:

target "app" {

  context = "."

  dockerfile = "Dockerfile"

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

}

실행:

docker buildx bake app

Buildx가 각 플랫폼별 Image를 생성합니다.

Docker Buildx Bake Platforms 지원 형식

대표적인 플랫폼 형식:

Linux AMD64

linux/amd64

사용 환경:

  • Intel 서버
  • AMD 서버
  • 대부분 Cloud VM

Linux ARM64

linux/arm64

사용 환경:

  • Apple Silicon
  • AWS Graviton
  • ARM 서버

Linux ARM v7

linux/arm/v7

사용 환경:

  • Raspberry Pi
  • Embedded Device

예:

platforms = [

  "linux/amd64",

  "linux/arm64",

  "linux/arm/v7"

]

Docker Buildx Bake Platforms 실행 방법

먼저 Builder 확인:

docker buildx ls

Multi-platform 지원 Builder 생성:

docker buildx create \
--name multi-builder \
--use

Build:

docker buildx bake app --push

Registry Push 후 자동으로 Manifest가 생성됩니다.

Docker Buildx Bake Platforms와 Registry Push

Multi-platform Image는 일반적으로 Registry에 Push해야 합니다.

예:

target "production" {

  tags = [

    "registry.company.com/app:v1"

  ]

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

}

실행:

docker buildx bake production --push

결과:

Registry

↓

app:v1

├── amd64 Image

└── arm64 Image

Docker Buildx Bake Platforms와 Dockerfile 작성

Multi-platform Build에서는 Dockerfile도 고려해야 합니다.

예:

FROM alpine

RUN uname -m

amd64 Build:

x86_64

arm64 Build:

aarch64

플랫폼별 차이가 발생할 수 있습니다.

Docker Buildx Bake Platforms ARG 활용

Build 플랫폼 정보를 사용할 수 있습니다.

Dockerfile:

ARG TARGETPLATFORM

ARG BUILDPLATFORM

RUN echo $TARGETPLATFORM

출력:

linux/amd64

linux/arm64

플랫폼별 Build 제어에 활용합니다.

Docker Buildx Bake Platforms CI/CD 활용

GitHub Actions에서는 Multi-platform Build를 자주 사용합니다.

예:

- name: Build Multi Platform Image

  run: |

    docker buildx bake production --push

Bake:

target "production" {

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

}

흐름:

Code Push

↓

CI 실행

↓

amd64 Build

↓

arm64 Build

↓

Registry Push

Docker Buildx Bake Platforms AWS 활용

Cloud 환경에서는 ARM 서버 사용이 증가하고 있습니다.

예:

AWS EC2

├── Intel Instance

└── Graviton Instance

Multi-platform Image:

company/app:v1

↓

amd64 실행 가능

arm64 실행 가능

서버 선택 폭이 넓어집니다.

Docker Buildx Bake Platforms 실무 예제

프로젝트:

project/

├── Dockerfile

├── docker-bake.hcl

└── deployment.yaml

docker-bake.hcl:

target "production" {

  tags = [

    "registry.company.com/backend:v1.0.0"

  ]

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

  output = [

    "type=image,push=true"

  ]

}

실행:

docker buildx bake production

결과:

Multi-platform Image 생성

↓

Registry 저장

↓

어떤 Architecture에서도 실행 가능

Docker Buildx Bake Platforms 문제 해결

ARM Build 오류

확인:

docker buildx inspect

Builder가 Multi-platform을 지원하는지 확인합니다.


Image가 Local에서 보이지 않는 경우

원인:

Multi-platform Image

해결:

Registry Push 후 사용합니다.


Build 시간이 오래 걸리는 경우

해결:

  • Cache 사용
  • Cache-from 적용
  • Cache-to 적용

Docker Buildx Bake Platforms 사용 시 주의사항

첫 번째는 Multi-platform Build는 일반 Build보다 시간이 오래 걸릴 수 있습니다.

두 번째는 Registry Push 방식 사용이 일반적입니다.

세 번째는 플랫폼별 Dependency 호환성을 확인해야 합니다.

네 번째는 ARM 환경 테스트가 필요합니다.

Best Practice

Docker Buildx Bake Platforms 활용 방법:

  • amd64 + arm64 기본 구성
  • Registry Push 사용
  • Cache-to/cache-from 적용
  • CI/CD 자동화
  • 플랫폼별 테스트 진행
  • Manifest 관리

자주 묻는 질문

Docker Buildx Bake Platforms는 무엇인가요?

하나의 Docker Image를 여러 CPU Architecture용으로 Build하는 기능입니다.

Apple Silicon Mac에서도 사용할 수 있나요?

가능합니다.

arm64 플랫폼 Image를 지원합니다.

Multi-platform Image는 어디에 저장하나요?

일반적으로 Docker Hub, ECR, Harbor 같은 Registry에 저장합니다.

하나의 Tag로 여러 Architecture를 관리할 수 있나요?

가능합니다.

Manifest가 각 플랫폼 Image를 연결합니다.

마무리

Docker Buildx Bake Platforms는 다양한 서버 환경에서 동일한 Docker Image를 사용할 수 있도록 만들어주는 핵심 기능입니다.

amd64와 arm64 환경을 하나의 Image Tag로 관리할 수 있어 Cloud 환경, Kubernetes, CI/CD 시스템에서 매우 유용합니다.

특히 최근 ARM 서버와 Apple Silicon 사용이 증가하면서 Multi-platform Build는 현대적인 Docker 운영 환경에서 필수적인 기술이 되고 있습니다.

댓글 남기기