Docker 이미지를 여러 CPU 환경에서 실행해야 하는 경우 멀티 플랫폼 이미지 구성이 필요합니다.
예를 들어 하나의 애플리케이션을 다음 환경에서 실행한다고 가정합니다.
- 일반 서버 환경 (linux/amd64)
- ARM 서버 환경 (linux/arm64)
- 임베디드 환경 (linux/arm/v7)
각 플랫폼별 이미지를 따로 생성한 후 하나의 이미지 이름으로 관리하면 배포가 훨씬 편리해집니다.
이때 사용하는 기능이 바로 Docker Buildx Imagetools Create입니다.
Docker Buildx Imagetools Create는 여러 플랫폼별 이미지를 하나의 Manifest List로 연결하여 멀티 플랫폼 이미지를 생성하는 명령어입니다.
사용자는 하나의 이미지 Tag만 사용하지만 Docker는 실행 환경에 맞는 이미지를 자동으로 선택할 수 있습니다.
이번 글에서는 Docker Buildx Imagetools Create의 개념부터 기본 사용법, Manifest 생성 방법, 멀티 플랫폼 이미지 구성, 실무 활용 방법까지 자세히 알아보겠습니다.
Docker Buildx Imagetools Create란 무엇인가?
Docker Buildx Imagetools Create는 여러 개의 Docker 이미지를 하나의 멀티 플랫폼 이미지로 묶는 기능입니다.
각 플랫폼별 이미지:
my-app:amd64
my-app:arm64
를 하나의 이미지:
my-app:latest
로 연결합니다.
이 과정에서 생성되는 것이 바로 Image Manifest입니다.
Manifest란 무엇인가?
Manifest는 하나의 이미지 이름 아래 여러 플랫폼 이미지를 연결하는 정보입니다.
예:
my-app:latest
├── linux/amd64
└── linux/arm64
사용자가:
docker pull my-app:latest
를 실행하면 Docker가 현재 환경에 맞는 이미지를 자동 선택합니다.
Docker Buildx Imagetools Create는 언제 사용하는가?
다음과 같은 환경에서 사용합니다.
- 멀티 플랫폼 이미지 배포
- ARM 서버 지원
- Kubernetes 운영 환경
- Docker Hub 이미지 관리
- 여러 아키텍처 이미지 통합
특히 ARM 기반 클라우드 서버가 증가하면서 중요성이 커지고 있습니다.
Docker Buildx Imagetools Create 기본 사용법
기본 형식:
docker buildx imagetools create \
-t 이미지명 \
이미지1 이미지2
예:
docker buildx imagetools create \
-t company/app:latest \
company/app:amd64 \
company/app:arm64
두 이미지를 하나의 멀티 플랫폼 이미지로 생성합니다.
플랫폼별 이미지 먼저 생성하기
Create를 사용하기 전에 각 플랫폼 이미지가 필요합니다.
AMD64 이미지:
docker buildx build \
--platform linux/amd64 \
-t company/app:amd64 \
--push .
ARM64 이미지:
docker buildx build \
--platform linux/arm64 \
-t company/app:arm64 \
--push .
이후 두 이미지를 연결합니다.
Manifest 생성 확인하기
생성 후 확인:
docker buildx imagetools inspect company/app:latest
출력:
Platforms:
linux/amd64
linux/arm64
하나의 멀티 플랫폼 이미지가 생성된 것을 확인할 수 있습니다.
Docker Buildx Imagetools Create 옵션
이미지 Tag 지정
docker buildx imagetools create \
-t company/app:v1 \
company/app:amd64 \
company/app:arm64
새로운 Tag를 지정합니다.
여러 이미지 연결
docker buildx imagetools create \
-t company/app:latest \
app:v1 \
app:v2
여러 이미지를 하나의 Manifest로 구성합니다.
Docker Buildx Imagetools Create 실무 활용 예제
ARM·AMD64 지원 이미지 만들기
프로젝트에서 두 개의 이미지를 생성했습니다.
company/server:amd64
company/server:arm64
Manifest 생성:
docker buildx imagetools create \
-t company/server:latest \
company/server:amd64 \
company/server:arm64
확인:
docker buildx imagetools inspect company/server:latest
결과:
Platforms:
linux/amd64
linux/arm64
하나의 이미지 이름으로 여러 환경을 지원할 수 있습니다.
Linux 서버 문제 해결
ARM 서버에 이미지를 배포했는데 실행 오류가 발생했습니다.
오류:
no matching manifest for linux/arm64
이미지를 확인했습니다.
docker buildx imagetools inspect company/app:latest
결과:
Platforms:
linux/amd64
AMD64 이미지만 존재하는 상태였습니다.
해결을 위해 ARM 이미지를 추가 생성했습니다.
docker buildx build \
--platform linux/arm64 \
-t company/app:arm64 \
--push .
이후 Manifest를 다시 생성했습니다.
docker buildx imagetools create \
-t company/app:latest \
company/app:amd64 \
company/app:arm64
확인:
docker buildx imagetools inspect company/app:latest
결과:
Platforms:
linux/amd64
linux/arm64
ARM 서버에서도 정상적으로 이미지를 사용할 수 있게 되었습니다.
Docker Buildx Imagetools Create 사용 시 주의사항
첫 번째는 Create는 이미지를 새로 빌드하지 않습니다.
기존에 Registry에 존재하는 이미지를 연결하는 기능입니다.
두 번째는 연결할 이미지가 먼저 Push되어 있어야 합니다.
세 번째는 잘못된 플랫폼 이미지를 연결하면 실행 오류가 발생할 수 있습니다.
네 번째는 Manifest 생성 후 반드시 Inspect로 확인하는 것이 좋습니다.
Best Practice
Docker Buildx Imagetools Create를 사용할 때는 다음 방법을 추천합니다.
- 플랫폼별 이미지를 먼저 검증합니다.
- Manifest 생성 후 Inspect로 확인합니다.
- 명확한 Tag 규칙을 사용합니다.
- Digest 기반 배포를 고려합니다.
- CI/CD 과정에서 자동 Manifest 생성을 구성합니다.
- ARM·AMD64 환경을 모두 테스트합니다.
자주 묻는 질문
Docker Buildx Imagetools Create는 이미지를 빌드하나요?
아닙니다.
기존 이미지를 하나의 Manifest로 연결합니다.
멀티 플랫폼 이미지는 왜 필요한가요?
하나의 이미지 이름으로 여러 CPU 환경을 지원하기 위해 필요합니다.
Create 후 이미지를 다시 Push해야 하나요?
Create 명령 자체가 Registry에 Manifest를 생성합니다.
Buildx Build와 Create 차이는 무엇인가요?
Build는 이미지를 생성하고, Create는 기존 이미지를 연결합니다.
마무리
Docker Buildx Imagetools Create는 멀티 플랫폼 Docker 이미지를 구성하는 핵심 기능입니다.
각 플랫폼별 이미지를 생성한 후 하나의 Manifest로 연결하면 사용자는 동일한 이미지 Tag만 사용하면서 다양한 환경에서 애플리케이션을 실행할 수 있습니다.
특히 ARM과 AMD64 환경을 함께 운영하는 클라우드, Kubernetes, CI/CD 환경에서는 Imagetools Create를 활용한 이미지 관리가 매우 중요합니다.