Docker 이미지를 운영하다 보면 하나의 서버 환경만 지원하는 이미지로는 부족한 경우가 많습니다.
예:
- Intel 서버
- AMD 서버
- ARM 서버
- Apple Silicon Mac
- Raspberry Pi
- 클라우드 ARM 인스턴스
각 환경마다 CPU 구조가 다르기 때문에 동일한 Docker 이미지를 실행하지 못하는 문제가 발생할 수 있습니다.
기존 방식:
docker buildx bake
하나의 환경 기준으로만 이미지 생성
하지만 Docker Buildx Bake에서는 Platform 설정을 통해 여러 CPU 아키텍처용 이미지를 동시에 생성할 수 있습니다.
예:
docker-bake.hcl
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
결과:
linux/amd64 이미지 생성
+
linux/arm64 이미지 생성
하나의 Docker Image Tag로 여러 플랫폼을 지원할 수 있습니다.
이번 글에서는 Docker Buildx Bake Platform의 개념부터 멀티 아키텍처 빌드, 플랫폼 설정 방법, CI/CD 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake Platform이란 무엇인가?
Docker Buildx Bake Platform은 Docker 이미지를 생성할 대상 CPU 아키텍처와 운영체제를 지정하는 기능입니다.
기본 구조:
Dockerfile
↓
Platform 지정
↓
Architecture별 이미지 생성
예:
platforms = [
"linux/amd64",
"linux/arm64"
]
두 가지 환경에서 실행 가능한 이미지를 만들 수 있습니다.
Docker Platform 구조 이해하기
Docker Platform은 일반적으로 다음 형식으로 작성합니다.
OS/Architecture
예:
linux/amd64
= Linux 운영체제 + Intel/AMD 64bit CPU
linux/arm64
= Linux 운영체제 + ARM 64bit CPU
대표적인 Platform:
| Platform | 설명 |
|---|---|
| linux/amd64 | 일반 서버, Intel CPU |
| linux/arm64 | ARM 서버, Apple Silicon |
| linux/386 | 32bit Intel |
| linux/arm/v7 | ARM 32bit |
Docker Buildx Bake Platform이 필요한 이유
일반적인 Docker Image:
amd64 전용 이미지
문제:
ARM 서버에서는 실행 불가
예:
개발자:
MacBook M 시리즈 사용
↓
ARM64 환경
운영 서버:
Intel 서버
↓
AMD64 환경
Platform 기능 사용:
하나의 Image Tag
↓
amd64 지원
↓
arm64 지원
다양한 환경에서 동일한 이미지를 사용할 수 있습니다.
Docker Buildx Bake Platform 기본 사용법
docker-bake.hcl:
target "app" {
context = "."
platforms = [
"linux/amd64",
"linux/arm64"
]
tags = [
"company/app:v1"
]
}
실행:
docker buildx bake app --push
결과:
company/app:v1
├── linux/amd64
└── linux/arm64
Docker Buildx Bake Platform과 Docker Buildx Builder
멀티 플랫폼 빌드를 실행하려면 Buildx Builder가 필요합니다.
확인:
docker buildx ls
Builder 생성:
docker buildx create \
--name multi-builder \
--use
확인:
docker buildx inspect
멀티 플랫폼 빌드 환경을 준비할 수 있습니다.
Docker Buildx Bake Platform Registry 저장
멀티 플랫폼 이미지는 일반적으로 Registry에 Push해야 합니다.
예:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
tags = [
"company/app:v1"
]
output = [
"type=registry"
]
}
실행:
docker buildx bake app
결과:
Registry에 Multi-platform Image 저장
Docker Buildx Bake Platform과 –load 차이
멀티 플랫폼 빌드에서는 주의할 점이 있습니다.
일반:
docker buildx bake --load
가능:
단일 플랫폼 이미지
멀티 플랫폼:
linux/amd64
+
linux/arm64
결과:
Docker Engine에 직접 Load 불가
멀티 플랫폼은 일반적으로:
docker buildx bake --push
방식을 사용합니다.
Docker Buildx Bake Platform 실무 활용 예제
Intel 서버 + ARM 서버 지원
docker-bake.hcl:
target "production" {
platforms = [
"linux/amd64",
"linux/arm64"
]
tags = [
"company/app:production"
]
}
빌드:
docker buildx bake production --push
결과:
Intel 서버
↓
amd64 이미지 사용
ARM 서버
↓
arm64 이미지 사용
자동으로 맞는 이미지를 선택합니다.
Docker Buildx Bake Platform과 CI/CD 활용
CI/CD 환경:
코드 변경
↓
Multi-platform Build
↓
Registry Push
↓
서버 배포
예:
docker buildx bake \
--push
활용:
- Kubernetes 배포
- 클라우드 서버 운영
- 다양한 개발 환경 지원
Docker Buildx Bake Platform과 Cache 활용
멀티 플랫폼 빌드는 시간이 오래 걸릴 수 있습니다.
Cache 적용:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
cache-from = [
"type=registry,ref=company/cache"
]
cache-to = [
"type=registry,ref=company/cache"
]
}
효과:
- 반복 빌드 시간 감소
- CI 비용 절감
- Layer 재사용
Linux 서버 문제 해결
Docker 이미지를 하나 만들어 여러 서버에서 사용하려 했습니다.
기존:
docker buildx bake app
문제:
Intel 서버 정상 실행
ARM 서버 실행 실패
원인:
amd64 전용 이미지 생성
해결:
docker-bake.hcl:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
빌드:
docker buildx bake app --push
결과:
Intel 서버와 ARM 서버 모두 동일한 Image Tag 사용 가능
Docker Buildx Bake Platform 사용 시 주의사항
첫 번째는 멀티 플랫폼 이미지는 빌드 시간이 증가할 수 있습니다.
두 번째는 Registry Push 방식이 일반적으로 필요합니다.
세 번째는 Builder가 멀티 플랫폼을 지원하는지 확인해야 합니다.
네 번째는 모든 Base Image가 해당 Platform을 지원하는지 확인해야 합니다.
Best Practice
Docker Buildx Bake Platform 활용 방법:
- 운영 환경은 Multi-platform 사용
- amd64와 arm64 함께 관리
- Registry Push 방식 사용
- Cache 함께 적용
- Platform별 테스트 진행
- 공식 Multi-arch Base Image 사용
자주 묻는 질문
Docker Buildx Bake Platform은 무엇인가요?
Docker 이미지를 여러 CPU 아키텍처용으로 빌드하는 기능입니다.
가장 많이 사용하는 Platform은 무엇인가요?
일반적으로:
linux/amd64
linux/arm64
두 가지를 많이 사용합니다.
ARM Mac에서도 사용할 수 있나요?
가능합니다.
Apple Silicon Mac은 ARM64 기반이므로 arm64 이미지를 사용할 수 있습니다.
멀티 플랫폼 이미지는 어디에 저장하나요?
일반적으로 Docker Registry에 Push하여 관리합니다.
마무리
Docker Buildx Bake Platform은 다양한 서버 환경을 지원하기 위한 핵심 기능입니다.
하나의 Docker Image Tag로 Intel 서버, ARM 서버, Apple Silicon 환경 등 여러 플랫폼에서 실행 가능한 이미지를 생성할 수 있습니다.
특히 클라우드 환경과 Kubernetes 운영에서는 다양한 CPU 아키텍처를 지원하는 것이 중요하기 때문에 Multi-platform Build는 현대 Docker 운영에서 필수적인 기술입니다.
Docker Buildx Bake Platform과 Cache, Registry Push를 함께 활용하면 빠르고 안정적인 멀티 아키텍처 이미지 빌드 환경을 구축할 수 있습니다.