최근 서버 환경에서는 하나의 CPU Architecture만 지원하는 Image보다 여러 환경에서 실행 가능한 Multi-platform Image가 중요해지고 있습니다.
예:
- 일반 서버 → AMD64
- AWS Graviton → ARM64
- Apple Silicon Mac → ARM64
- Edge Device → ARM 기반
기존 Docker Build:
Dockerfile
↓
하나의 Architecture Build
↓
특정 환경에서만 실행
문제:
AMD64 Image
↓
ARM64 서버 실행 불가
또는:
ARM64 Image
↓
일반 서버 실행 불가
Docker Buildx Bake에서는 Multi-platform Build 기능을 사용하여 하나의 설정으로 여러 Architecture Image를 생성할 수 있습니다.
예:
docker-bake.hcl
target "production" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
실행:
docker buildx bake production --push
결과:
Docker Image Build
↓
linux/amd64 생성
↓
linux/arm64 생성
↓
하나의 Multi-platform Image 생성
이번 글에서는 Docker Buildx Bake Multi-platform Build의 개념부터 Platform 설정, ARM64/AMD64 Image 생성, Registry Push, CI/CD 활용까지 자세히 알아보겠습니다.
Docker Buildx Bake Multi-platform Build란 무엇인가?
Multi-platform Build는 하나의 Docker Image를 여러 CPU Architecture에서 실행 가능하도록 만드는 방식입니다.
기본 구조:
Source Code
↓
Docker Buildx
↓
AMD64 Image
+
ARM64 Image
↓
Multi-platform Manifest
사용자가 Image를 다운로드하면 Docker가 실행 환경에 맞는 Image를 자동 선택합니다.
예:
Intel Server
↓
linux/amd64 Image 선택
ARM Server
↓
linux/arm64 Image 선택
Docker Buildx Bake Multi-platform Build가 필요한 이유
서버 환경은 다양해지고 있습니다.
예:
AMD64 환경
사용:
- 일반 Cloud Server
- Intel CPU
- AMD CPU
ARM64 환경
사용:
- AWS Graviton
- Apple Silicon
- ARM Server
하나의 Architecture만 지원하면:
서비스 배포
↓
환경 변경
↓
Image 재생성 필요
문제가 발생합니다.
Multi-platform 사용:
하나의 Image
↓
여러 서버 환경 지원
장점:
- 배포 편의성 증가
- Cloud 선택 자유도 증가
- 운영 효율 향상
Docker Buildx Bake Multi-platform 기본 설정
docker-bake.hcl:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
실행:
docker buildx bake app
Build 결과:
linux/amd64
+
linux/arm64
Image 생성
Docker Buildx Bake Platform 종류
대표적인 Platform:
linux/amd64
가장 일반적인 서버 환경입니다.
사용:
- AWS EC2
- 일반 VPS
- Intel/AMD 서버
linux/arm64
ARM 기반 환경입니다.
사용:
- AWS Graviton
- Raspberry Pi
- Apple Silicon
linux/386
32bit 환경입니다.
현재는 사용 빈도가 낮습니다.
linux/arm/v7
ARM 32bit 환경입니다.
Docker Buildx Bake Multi-platform 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
└── arm64
Docker Buildx Bake Multi-platform Local 테스트
Multi-platform Image는 Local Docker 저장 방식에 제한이 있습니다.
일반적인 방법:
docker buildx build \
--platform linux/amd64,linux/arm64 \
--push
테스트 목적:
특정 Platform Build:
docker buildx bake app \
--set *.platform=linux/amd64
Docker Buildx Bake Multi-platform과 QEMU
다른 Architecture Build를 위해 QEMU를 사용할 수 있습니다.
예:
AMD64 PC
↓
ARM64 Image Build
↓
QEMU Emulator 사용
설치:
docker run --privileged --rm tonistiigi/binfmt --install all
확인:
docker buildx inspect
결과:
Platforms:
linux/amd64
linux/arm64
Docker Buildx Bake Multi-platform CI/CD 활용
운영 환경에서는 CI/CD에서 많이 사용합니다.
구조:
Git Push
↓
CI 실행
↓
AMD64 Build
+
ARM64 Build
↓
Registry Push
↓
서버 배포
GitHub Actions 예:
- name: Build Multi Platform
run: |
docker buildx bake production --push
효과:
- 자동 Multi-platform 생성
- 서버 환경 대응
- 배포 자동화
Docker Buildx Bake Multi-platform Cache 활용
Multi-platform Build는 시간이 오래 걸릴 수 있습니다.
Cache 적용:
target "production" {
platforms = [
"linux/amd64",
"linux/arm64"
]
cache-from = [
"type=registry,ref=image:cache"
]
cache-to = [
"type=registry,ref=image:cache"
]
}
효과:
- 반복 Build 속도 향상
- CI 시간 감소
Docker Buildx Bake Multi-platform 실무 예제
프로젝트:
project/
├── Dockerfile
├── docker-bake.hcl
└── app/
docker-bake.hcl:
target "production" {
tags = [
"registry.company.com/server:v1"
]
platforms = [
"linux/amd64",
"linux/arm64"
]
output = [
"type=image,push=true"
]
attest = [
"type=provenance",
"type=sbom"
]
}
실행:
docker buildx bake production
결과:
AMD64 Image 생성
+
ARM64 Image 생성
+
SBOM 생성
+
Provenance 생성
↓
Registry 저장
Docker Buildx Bake Multi-platform 확인 방법
Image 정보 확인:
docker buildx imagetools inspect image-name
확인:
Platform:
linux/amd64
linux/arm64
Builder 확인:
docker buildx inspect
Docker Buildx Bake Multi-platform 문제 해결
ARM64 Build 실패
확인:
docker buildx inspect
QEMU 지원 여부 확인
Build 시간이 너무 오래 걸리는 경우
해결:
- Cache 적용
- Native Runner 사용
- 필요한 Platform만 Build
Image 실행 오류
확인:
- Architecture 지원 여부
- Base Image 지원 여부
Docker Buildx Bake Multi-platform 사용 시 주의사항
첫 번째는 Base Image가 모든 Platform을 지원하는지 확인해야 합니다.
두 번째는 Multi-platform Build는 일반 Build보다 시간이 증가할 수 있습니다.
세 번째는 Registry Push 방식이 일반적으로 권장됩니다.
네 번째는 Platform별 테스트가 필요합니다.
Best Practice
Docker Buildx Bake Multi-platform 활용 방법:
- AMD64 + ARM64 구성
- Registry Push 사용
- Cache 적용
- SBOM/Provenance 추가
- CI/CD 자동화
- Production 환경 적용
자주 묻는 질문
Multi-platform Build는 무엇인가요?
하나의 Docker Image를 여러 CPU Architecture에서 실행 가능하도록 만드는 기능입니다.
AMD64와 ARM64를 동시에 만들 수 있나요?
가능합니다.
Buildx Bake의 platforms 설정을 사용하면 됩니다.
Local Docker에 저장할 수 있나요?
Multi-platform Image는 일반적으로 Registry Push 방식으로 관리합니다.
서버 운영에서 필요한가요?
Cloud 환경과 다양한 서버 Architecture를 지원하려면 매우 유용합니다.
마무리
Docker Buildx Bake Multi-platform Build는 다양한 서버 환경을 지원하기 위한 핵심 기능입니다.
AMD64 서버와 ARM64 서버를 하나의 Image 구조로 관리하면 Cloud 환경 변경과 서버 확장이 더욱 쉬워집니다.
특히 AWS Graviton, Kubernetes, Cloud Native 환경에서는 Multi-platform Image 구축 능력이 중요한 서버 운영 기술이 되고 있습니다.