Docker Image를 운영 환경에서 관리할 때 가장 중요한 요소 중 하나는 Tag(태그) 입니다.
Docker Image는 같은 이름이라도 Tag를 통해 여러 버전을 구분할 수 있습니다.
예:
company/app:v1.0.0
company/app:v1.1.0
company/app:latest
Tag를 활용하면:
- 버전 관리
- 배포 관리
- Rollback
- 개발·테스트·운영 분리
가 가능합니다.
Docker Buildx Bake에서는 tags 옵션을 사용하여 생성할 Image 이름과 버전을 관리할 수 있습니다.
예:
docker-bake.hcl
target "app" {
tags = [
"company/app:v1.0.0"
]
}
실행:
docker buildx bake app --push
결과:
Docker Image 생성
↓
company/app:v1.0.0
↓
Registry 저장
이번 글에서는 Docker Buildx Bake Tags의 개념부터 Tag 설정 방법, 버전 관리, Multi-platform Image, CI/CD 자동 Tag 생성까지 자세히 알아보겠습니다.
Docker Buildx Bake Tags란 무엇인가?
Docker Buildx Bake Tags는 Build 결과로 생성되는 Docker Image 이름과 버전을 지정하는 기능입니다.
기본 구조:
Registry 주소
+
Repository 이름
+
Tag 버전
예:
docker.io/company/app:v1.0.0
구성:
docker.io
=
Registry
company/app
=
Image 이름
v1.0.0
=
Tag
Docker Buildx Bake Tags가 필요한 이유
Tag 없이 Image를 관리하면 문제가 발생합니다.
예:
company/app:latest
문제:
- 현재 버전 확인 어려움
- 이전 버전 복구 어려움
- 배포 추적 어려움
Tag 사용:
company/app:v1.0.0
company/app:v1.1.0
company/app:v2.0.0
장점:
- 명확한 버전 관리
- 안정적인 배포
- 빠른 Rollback
- Image 추적 가능
Docker Buildx Bake Tags 기본 설정
docker-bake.hcl:
target "app" {
tags = [
"company/app:v1"
]
}
실행:
docker buildx bake app
결과:
company/app:v1
↓
Docker Image 생성
Docker Buildx Bake 여러 Tag 사용하기
하나의 Image에 여러 Tag를 지정할 수 있습니다.
예:
target "production" {
tags = [
"company/app:v1.0.0",
"company/app:latest"
]
}
결과:
company/app:v1.0.0
+
company/app:latest
동일한 Image를 여러 이름으로 관리할 수 있습니다.
Docker Buildx Bake Version Tag 관리 방법
운영 환경에서는 Semantic Versioning 방식을 많이 사용합니다.
형식:
Major.Minor.Patch
예:
v1.0.0
의미:
v1
↓
큰 변경
0
↓
기능 추가
0
↓
버그 수정
예:
v2.1.5
Docker Buildx Bake latest Tag 사용법
latest는 가장 많이 사용하는 Tag입니다.
예:
tags = [
"company/app:latest"
]
장점:
- 최신 Image 접근 쉬움
단점:
- 정확한 버전 확인 어려움
- Rollback 어려움
운영 환경에서는:
company/app:v1.2.0
+
company/app:latest
같이 사용하는 것을 권장합니다.
Docker Buildx Bake 환경별 Tags 관리
개발:
target "dev" {
tags = [
"company/app:dev"
]
}
테스트:
target "test" {
tags = [
"company/app:test"
]
}
운영:
target "production" {
tags = [
"company/app:v1.0.0"
]
}
하나의 Dockerfile로 환경별 Image를 관리할 수 있습니다.
Docker Buildx Bake Tags와 Registry Push
Registry Push:
docker buildx bake production --push
예:
target "production" {
tags = [
"registry.company.com/backend:v1.0.0"
]
}
결과:
Registry
↓
backend:v1.0.0 저장
Docker Buildx Bake Tags와 CI/CD 자동 생성
CI/CD에서는 Tag를 자동 생성하는 경우가 많습니다.
예:
Git Commit:
a82fd91
생성 Tag:
company/app:a82fd91
docker-bake.hcl:
target "app" {
tags = [
"company/app:${VERSION}"
]
}
활용:
- Commit 기반 배포
- Release 자동화
- Rollback 관리
Docker Buildx Bake Git Tag 활용
Git Tag:
git tag v1.0.0
Docker Image:
company/app:v1.0.0
흐름:
Git Release
↓
Docker Build
↓
동일 버전 Tag 생성
↓
배포
Docker Buildx Bake Tags Multi-platform 활용
Multi-platform Image에서도 Tag를 사용할 수 있습니다.
예:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
tags = [
"company/app:v1.0.0"
]
}
결과:
company/app:v1.0.0
├── linux/amd64
└── linux/arm64
하나의 Tag로 여러 플랫폼을 관리합니다.
Docker Buildx Bake Tags 실무 예제
프로젝트:
project/
├── Dockerfile
├── docker-bake.hcl
└── deployment.yaml
docker-bake.hcl:
target "production" {
tags = [
"registry.company.com/app:v1.5.0",
"registry.company.com/app:latest"
]
platforms = [
"linux/amd64",
"linux/arm64"
]
}
실행:
docker buildx bake production --push
결과:
Registry
↓
app:v1.5.0
↓
app:latest
Docker Buildx Bake Tags 문제 해결
Tag Push 오류
오류:
denied: requested access
확인:
- Registry 로그인
- Repository 권한
- Tag 이름
잘못된 Tag 형식
잘못된 예:
app version 1
올바른 예:
app:v1.0.0
latest가 이전 Image를 가리키는 경우
새 Image Push 후 Tag 연결을 확인합니다.
Docker Buildx Bake Tags 사용 시 주의사항
첫 번째는 운영 환경에서 latest만 사용하는 것을 피하는 것이 좋습니다.
두 번째는 버전 규칙을 정해야 합니다.
세 번째는 Image와 Tag 관리 정책이 필요합니다.
네 번째는 Release 버전과 Git 버전을 일치시키는 것이 좋습니다.
Best Practice
Docker Buildx Bake Tags 활용 방법:
- Semantic Version 사용
- latest는 보조 사용
- 환경별 Tag 분리
- Git Tag 연동
- CI/CD 자동 생성
- Rollback 가능한 버전 유지
자주 묻는 질문
Docker Buildx Bake Tags는 무엇인가요?
생성되는 Docker Image 이름과 버전을 지정하는 기능입니다.
여러 Tag를 동시에 만들 수 있나요?
가능합니다.
하나의 Image에 여러 Tag를 지정할 수 있습니다.
latest만 사용해도 되나요?
가능하지만 운영 환경에서는 버전 Tag를 함께 사용하는 것이 안전합니다.
CI/CD에서 자동 Tag 생성이 가능한가요?
가능합니다.
Git Commit, Release Version 등을 활용할 수 있습니다.
마무리
Docker Buildx Bake Tags는 Docker Image를 체계적으로 관리하기 위한 핵심 기능입니다.
Tag를 활용하면 Image 버전, 배포 상태, 환경별 구성을 명확하게 관리할 수 있으며 운영 환경에서도 안정적인 배포와 Rollback이 가능합니다.
특히 CI/CD, Kubernetes, Private Registry 환경에서는 자동 Tag 생성과 버전 관리 전략을 함께 적용하면 효율적인 Docker 운영 환경을 구축할 수 있습니다.