최근 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 운영 환경에서 필수적인 기술이 되고 있습니다.