Docker 이미지를 운영 환경에 배포할 때 자동화된 CI/CD Pipeline은 필수적인 요소입니다.
특히 대규모 프로젝트에서는 코드 변경마다 직접 Docker 이미지를 빌드하고 Registry에 업로드하는 방식은 비효율적입니다.
기존 방식:
docker buildx bake --push
직접 실행
↓
이미지 생성
↓
Registry 업로드
하지만 Jenkins와 Docker Buildx Bake를 연결하면 다음 과정을 자동화할 수 있습니다.
Git Push
↓
Jenkins Pipeline 실행
↓
Docker Buildx Bake 실행
↓
Docker Image 생성
↓
Registry Push
↓
배포
이번 글에서는 Docker Buildx Bake와 Jenkins 연동 방법, Jenkinsfile 작성, Docker Buildx 설정, Registry Push, Cache 적용, Multi-platform 빌드 자동화 방법까지 자세히 알아보겠습니다.
Docker Buildx Bake Jenkins란 무엇인가?
Docker Buildx Bake Jenkins는 Jenkins CI/CD 환경에서 Docker Buildx Bake를 자동 실행하는 구성 방법입니다.
기본 구조:
Source Code
↓
Jenkins Pipeline
↓
Docker Buildx Builder
↓
docker buildx bake
↓
Docker Image
Jenkins가 Docker 이미지 빌드 과정을 자동으로 관리합니다.
Docker Buildx Bake와 Jenkins를 사용하는 이유
수동 빌드:
docker buildx bake --push
문제:
- 사람이 직접 실행해야 함
- 빌드 환경 차이 발생
- 반복 작업 증가
- 배포 속도 저하
Jenkins 적용:
코드 변경
↓
자동 빌드
↓
자동 테스트
↓
자동 배포
장점:
- Build 자동화
- 배포 시간 단축
- 동일한 환경 유지
- 작업 오류 감소
Jenkins Pipeline 기본 Docker Buildx 설정
Jenkins Pipeline 파일:
Jenkinsfile
기본 구조:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker buildx bake'
}
}
}
}
Jenkins가 Buildx Bake 명령을 실행합니다.
Jenkins에서 Docker Buildx Builder 생성하기
Pipeline 내부에서 Builder를 생성할 수 있습니다.
예:
pipeline {
agent any
stages {
stage('Setup Buildx') {
steps {
sh '''
docker buildx create \
--use \
--name jenkins-builder
docker buildx inspect
'''
}
}
}
}
동작:
Jenkins 실행
↓
Buildx Builder 생성
↓
Docker Build 가능
Docker Buildx Bake Jenkins Registry Push 설정
운영 환경에서는 빌드한 이미지를 Registry에 저장해야 합니다.
예:
stage('Login Registry') {
steps {
sh '''
docker login \
-u $DOCKER_USER \
-p $DOCKER_PASSWORD
'''
}
}
Build Push:
stage('Build Image') {
steps {
sh '''
docker buildx bake --push
'''
}
}
결과:
Jenkins
↓
Docker Build
↓
Registry Push
Docker Buildx Bake Jenkins Cache 설정
Jenkins는 새로운 Build 환경에서 실행되는 경우가 많기 때문에 Cache 설정이 중요합니다.
docker-bake.hcl:
target "app" {
cache-from = [
"type=registry,ref=company/cache"
]
cache-to = [
"type=registry,ref=company/cache"
]
}
효과:
- Docker Layer 재사용
- 빌드 시간 감소
- Jenkins 실행 속도 향상
Docker Buildx Bake Jenkins Multi-platform 빌드
여러 서버 환경을 지원하려면 Multi-platform 빌드가 필요합니다.
docker-bake.hcl:
target "app" {
platforms = [
"linux/amd64",
"linux/arm64"
]
}
Jenkinsfile:
stage('Build') {
steps {
sh '''
docker buildx bake --push
'''
}
}
결과:
AMD64 Image 생성
+
ARM64 Image 생성
Docker Buildx Bake Jenkins Secret 관리
민감한 정보는 Jenkins Credentials를 사용합니다.
관리 대상:
- Docker Registry Password
- API Token
- SSH Key
Jenkinsfile:
withCredentials([
usernamePassword(
credentialsId: 'docker-login',
usernameVariable: 'USER',
passwordVariable: 'PASS'
)
]) {
sh '''
docker login \
-u $USER \
-p $PASS
'''
}
보안 정보를 안전하게 사용할 수 있습니다.
Docker Buildx Bake Jenkins 실무 예제
프로젝트 구조:
project/
├── Dockerfile
├── docker-bake.hcl
└── Jenkinsfile
Jenkinsfile:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Buildx Setup') {
steps {
sh '''
docker buildx create \
--use
'''
}
}
stage('Build Image') {
steps {
sh '''
docker buildx bake --push
'''
}
}
}
}
코드 변경 시:
자동 Build
↓
자동 Push
Docker Buildx Bake Jenkins와 배포 자동화
전체 흐름:
Developer Push
↓
Jenkins Trigger
↓
Docker Buildx Bake
↓
Registry Push
↓
Server Deploy
활용:
- Kubernetes 배포
- Docker Compose 배포
- Cloud 서버 운영
Jenkins Agent에서 Docker Buildx 사용하기
Jenkins Agent에는 다음 환경이 필요합니다.
필요 요소:
- Docker 설치
- Docker Buildx 지원
- Registry 접근 권한
- Docker Socket 권한
확인:
docker buildx version
정상 출력되면 Buildx 사용 가능합니다.
Linux 서버 문제 해결
기존에는 개발자가 직접 Docker 이미지를 빌드했습니다.
기존:
docker buildx bake --push
문제:
- 빌드 과정 반복
- 배포 지연
- 환경 차이 발생
Jenkins 적용:
stage('Docker Build') {
steps {
sh 'docker buildx bake --push'
}
}
결과:
- 코드 변경 자동 감지
- Docker Image 자동 생성
- Registry 자동 Push
CI/CD 환경을 구축할 수 있었습니다.
Docker Buildx Bake Jenkins 사용 시 주의사항
첫 번째는 Jenkins Agent의 Docker 권한 설정이 필요합니다.
두 번째는 Registry 인증 정보를 Credentials로 관리해야 합니다.
세 번째는 Cache 설정을 적용하면 빌드 속도가 향상됩니다.
네 번째는 Production Pipeline은 별도로 관리하는 것이 좋습니다.
Best Practice
Docker Buildx Bake Jenkins 활용 방법:
- Jenkinsfile 기반 Pipeline 관리
- Credentials 보안 관리
- Registry Push 자동화
- Cache 적용
- Multi-platform 빌드 구성
- Production 배포 단계 분리
자주 묻는 질문
Docker Buildx Bake를 Jenkins에서 사용할 수 있나요?
가능합니다.
Jenkins Pipeline에서 Docker Buildx Bake 명령을 실행하면 됩니다.
Jenkins에서 자동 Docker Image Push가 가능한가요?
가능합니다.
Registry 인증 후 --push 옵션을 사용하면 됩니다.
Cache를 적용할 수 있나요?
가능합니다.
Registry Cache를 활용하면 반복 빌드 속도를 높일 수 있습니다.
Multi-platform 빌드도 가능한가요?
가능합니다.
linux/amd64와 linux/arm64 이미지를 동시에 생성할 수 있습니다.
마무리
Docker Buildx Bake와 Jenkins를 함께 사용하면 Docker 이미지 빌드부터 배포까지 자동화된 CI/CD 환경을 구축할 수 있습니다.
Jenkins Pipeline에서 Buildx Builder를 생성하고 Bake 설정 파일을 활용하면 여러 서비스, 여러 플랫폼, 다양한 배포 환경을 효율적으로 관리할 수 있습니다.
특히 기업 환경이나 대규모 Docker 운영 환경에서는 Docker Buildx Bake와 Jenkins 조합을 활용하면 안정적이고 반복 가능한 자동화 빌드 시스템을 만들 수 있습니다.