Docker Image를 직접 Build하는 방식은 간단한 프로젝트에서는 충분하지만, 실제 운영 환경에서는 반복적인 작업이 많이 필요합니다.
예:
- 코드 변경 감지
- Docker Image 자동 Build
- Test 실행
- Registry Push
- 배포 실행
- Version 관리
수동 방식:
개발자 코드 수정
↓
직접 Build 실행
↓
직접 Push
↓
직접 배포
문제:
- 반복 작업 증가
- 실수 가능성 증가
- 배포 속도 저하
CI/CD 자동화 적용:
Code Push
↓
자동 Build
↓
자동 Test
↓
자동 Push
↓
자동 Deploy
Docker Buildx Bake는 CI/CD Pipeline과 함께 사용하면 더욱 강력한 Build 자동화 환경을 만들 수 있습니다.
예:
docker-bake.hcl
target "production" {
tags = [
"registry.company.com/app:${VERSION}"
]
platforms = [
"linux/amd64",
"linux/arm64"
]
cache-from = [
"type=gha"
]
cache-to = [
"type=gha,mode=max"
]
}
GitHub Actions:
- name: Build Image
run: |
docker buildx bake production --push
결과:
Git Push
↓
GitHub Actions 실행
↓
Docker Build
↓
Registry Push
이번 글에서는 Docker Buildx Bake CI/CD 자동화 개념부터 GitHub Actions 연동, GitLab CI 활용, 자동 Version 관리, 운영 배포 구조까지 자세히 알아보겠습니다.
Docker Buildx Bake CI/CD 자동화란 무엇인가?
Docker Buildx Bake CI/CD 자동화는 Docker Image Build 과정을 자동 Pipeline으로 구성하는 방법입니다.
기본 구조:
Source Code
↓
CI/CD 실행
↓
Docker Buildx Bake
↓
Docker Image 생성
↓
Registry 저장
사람이 직접 실행하지 않아도 코드 변경에 따라 자동으로 Build가 실행됩니다.
Docker Buildx Bake CI/CD가 필요한 이유
수동 Build 환경:
코드 변경
↓
개발자 확인
↓
명령어 실행
↓
Push
↓
배포
문제:
- 시간이 오래 걸림
- 환경 차이 발생
- Build 과정 누락 가능
자동화 환경:
코드 Push
↓
자동 Pipeline
↓
동일한 환경 Build
↓
배포
장점:
- 반복 작업 감소
- 안정적인 Build
- 배포 속도 향상
- 오류 감소
Docker Buildx Bake CI/CD 기본 구성
일반적인 프로젝트 구조:
project/
├── Dockerfile
├── docker-bake.hcl
├── docker-compose.yml
└── .github/
└── workflows/
└── build.yml
구성:
Dockerfile
↓
Image Build 설정
docker-bake.hcl
↓
Build 대상 관리
GitHub Actions
↓
자동 실행
GitHub Actions Docker Buildx Bake 설정
Workflow 파일:
name: Docker Build
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Buildx
uses: docker/setup-buildx-action@v3
- name: Build Image
run: |
docker buildx bake production --push
동작:
main Branch Push
↓
GitHub Actions 실행
↓
Buildx Bake 실행
↓
Image Push
Docker Buildx Bake Docker Hub 자동 Push
예:
docker-bake.hcl
target "production" {
tags = [
"username/app:latest"
]
output = [
"type=image,push=true"
]
}
Workflow:
- name: Build Push
run: |
docker buildx bake production
결과:
Docker Image Build
↓
Docker Hub Push
Docker Buildx Bake GitHub Container Registry 활용
GitHub Container Registry:
ghcr.io
설정:
target "production" {
tags = [
"ghcr.io/company/app:v1"
]
}
활용:
- GitHub 프로젝트
- Private Image 저장
- 조직 Repository
Docker Buildx Bake GitLab CI 활용
GitLab CI 예:
.gitlab-ci.yml
build:
stage: build
script:
- docker buildx bake production --push
흐름:
Git Push
↓
GitLab Runner
↓
Docker Build
↓
Registry Push
Docker Buildx Bake CI/CD Cache 적용
CI 환경에서는 Cache 적용이 중요합니다.
설정:
target "production" {
cache-from = [
"type=gha"
]
cache-to = [
"type=gha,mode=max"
]
}
효과:
첫 Build
↓
Cache 저장
두 번째 Build
↓
기존 Layer 재사용
↓
속도 향상
Docker Buildx Bake CI/CD Version 자동 관리
CI에서는 Build 번호를 자동으로 Tag에 적용할 수 있습니다.
예:
target "production" {
tags = [
"company/app:${VERSION}"
]
}
GitHub Actions:
env:
VERSION: ${{ github.sha }}
결과:
company/app:a82fd91
Commit 기준 Image 관리가 가능합니다.
Docker Buildx Bake Multi-platform CI/CD 구성
운영 환경에서는 여러 Architecture를 지원하는 경우가 많습니다.
예:
target "production" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
Pipeline:
Git Push
↓
amd64 Build
↓
arm64 Build
↓
Manifest 생성
↓
Registry 저장
다양한 서버에서 실행 가능합니다.
Docker Buildx Bake Secret CI/CD 연동
CI 환경에서는 Secret 관리가 중요합니다.
예:
env:
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
사용:
target "production" {
secret = [
"id=token,env=DOCKER_TOKEN"
]
}
Secret은 Image에 저장되지 않습니다.
Docker Buildx Bake 실무 CI/CD 구조
예:
Developer
↓
Git Push
↓
GitHub Actions
↓
Docker Buildx Bake
↓
Cache 적용
↓
Image Build
↓
Security Scan
↓
Registry Push
↓
Deploy
자동화된 Container 배포 환경을 만들 수 있습니다.
Docker Buildx Bake CI/CD 문제 해결
Buildx 명령어 오류
확인:
docker buildx version
Buildx 설치 상태를 확인합니다.
Registry Push 실패
확인:
- Docker Login
- Token 권한
- Repository 이름
Cache 적용 안 되는 경우
확인:
- cache-from 설정
- cache-to 설정
- Runner Cache 권한
Docker Buildx Bake CI/CD 사용 시 주의사항
첫 번째는 Production Secret을 Workflow 파일에 직접 작성하면 안 됩니다.
두 번째는 Cache 저장 위치를 관리해야 합니다.
세 번째는 Image Version 규칙을 정하는 것이 좋습니다.
네 번째는 Build 실패 시 로그 확인 체계를 만들어야 합니다.
Best Practice
Docker Buildx Bake CI/CD 활용 방법:
- Git Push 자동 Build
- Registry 자동 Push
- Cache 적용
- Version 자동 생성
- Secret 안전 관리
- Multi-platform Build
- 자동 배포 연결
자주 묻는 질문
Docker Buildx Bake를 CI/CD에서 사용할 수 있나요?
가능합니다.
GitHub Actions, GitLab CI 등과 연동할 수 있습니다.
가장 많이 사용하는 CI 도구는 무엇인가요?
GitHub Actions와 GitLab CI 환경에서 많이 활용됩니다.
자동으로 Docker Image를 Push할 수 있나요?
가능합니다.
output 또는 --push 옵션을 사용할 수 있습니다.
Cache를 적용하면 빨라지나요?
가능합니다.
이전 Build Layer를 재사용하여 Build 시간이 감소합니다.
마무리
Docker Buildx Bake CI/CD 자동화는 Docker Image 관리와 배포 과정을 효율적으로 만드는 핵심 방법입니다.
GitHub Actions, GitLab CI와 연결하면 코드 변경부터 Image Build, Registry Push까지 자동으로 처리할 수 있습니다.
특히 Production 환경에서는 Cache, Secret, Multi-platform Build, Version 관리를 함께 적용하면 안정적인 Container 배포 Pipeline을 구축할 수 있습니다.