Docker Buildx Bake GitLab CI 사용법 완벽 가이드! GitLab 기반 Docker Build 자동화하기

서버 운영 환경에서는 코드 변경부터 Docker Image 생성, Registry 저장, 배포까지 자동화하는 CI/CD Pipeline 구축이 중요합니다.

GitHub Actions와 함께 많이 사용되는 CI/CD 플랫폼 중 하나가 GitLab CI/CD입니다.

기본적인 수동 방식:

개발자 코드 수정

↓

서버 접속

↓

Docker Build 실행

↓

Image Push

↓

배포

문제:

  • 반복 작업 증가
  • 배포 실수 발생 가능
  • 운영 시간 증가

GitLab CI/CD 방식:

Git Push

↓

GitLab Runner 실행

↓

Docker Buildx Bake 실행

↓

Image 생성

↓

Registry Push

↓

자동 배포

Docker Buildx Bake를 GitLab CI와 연결하면 다음 작업을 자동화할 수 있습니다.

  • Docker Image Build
  • Multi-platform Build
  • Cache 관리
  • Registry Push
  • SBOM 생성
  • Provenance 검증

예:

.gitlab-ci.yml

build:

  stage: build

  script:

    - docker buildx bake production --push

결과:

Git Push

↓

자동 Docker Build

↓

Image 저장

↓

배포 준비 완료

이번 글에서는 Docker Buildx Bake GitLab CI 연동 방법부터 Runner 설정, Registry 연결, Cache 최적화, Production CI/CD 구성까지 자세히 알아보겠습니다.

Docker Buildx Bake GitLab CI란 무엇인가?

Docker Buildx Bake GitLab CI는 GitLab Runner 환경에서 Docker Buildx Bake를 실행하여 Container Build 과정을 자동화하는 방법입니다.

구조:

GitLab Repository

↓

GitLab Runner

↓

Docker Buildx Bake

↓

Container Registry

↓

Production Server

구성 요소:

  • GitLab Repository
  • GitLab CI Pipeline
  • GitLab Runner
  • Docker Buildx
  • Container Registry

Docker Buildx Bake GitLab CI가 필요한 이유

서버 운영에서는 동일한 Build 환경을 유지하는 것이 중요합니다.

수동 Build:

개발자 PC

↓

서버 환경 차이

↓

Build 결과 차이 발생

CI/CD 사용:

GitLab Runner

↓

동일한 Build 환경

↓

일관된 Image 생성

장점:

  • 자동 Build
  • 배포 안정성 향상
  • 작업 시간 감소
  • 운영 표준화

Docker Buildx Bake GitLab CI 기본 설정

프로젝트 구조:

project/

├── Dockerfile

├── docker-bake.hcl

└── .gitlab-ci.yml

docker-bake.hcl:

target "production" {

  tags = [

    "registry.gitlab.com/company/app:v1"

  ]

}

.gitlab-ci.yml:

stages:

  - build


build-image:

  stage: build

  script:

    - docker buildx bake production

Git Push 시 자동 실행됩니다.

Docker Buildx Bake GitLab Runner 설정

GitLab CI는 Runner 환경에서 실행됩니다.

필요 환경:

  • Docker 설치
  • Docker Buildx 지원
  • Privileged Mode

Runner 예:

image: docker:latest

services:

  - docker:dind

설명:

Docker Container

↓

Docker-in-Docker

↓

Docker Buildx 실행

Docker Buildx Bake GitLab CI Registry Push

Image를 Registry에 저장하려면 Login 과정이 필요합니다.

예:

build:

  script:

    - docker login 
      -u $CI_REGISTRY_USER 
      -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

    - docker buildx bake production --push

흐름:

GitLab CI

↓

Registry 인증

↓

Image Build

↓

Push

Docker Buildx Bake GitLab CI Cache 설정

CI 환경에서는 Cache가 매우 중요합니다.

Cache 없는 환경:

Runner 생성

↓

Cache 없음

↓

전체 Build 실행

Cache 적용:

docker-bake.hcl

target "production" {

  cache-from = [

    "type=registry,ref=image:cache"

  ]

  cache-to = [

    "type=registry,ref=image:cache"

  ]

}

효과:

  • Build 시간 감소
  • Runner 비용 절감
  • 반복 Build 최적화

Docker Buildx Bake GitLab CI Multi-platform Build

여러 서버 환경을 지원하기 위해 Multi-platform Build를 사용할 수 있습니다.

docker-bake.hcl:

target "production" {

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]

}

GitLab CI:

build:

  script:

    - docker buildx bake production --push

결과:

Registry

app:v1

├── AMD64

└── ARM64

Docker Buildx Bake GitLab CI Secret 관리

민감한 정보는 GitLab CI Variables를 사용합니다.

예:

GitLab Variables:

DOCKER_TOKEN

API_KEY

SSH_KEY

Pipeline:

variables:

  TOKEN: $DOCKER_TOKEN

장점:

  • Token 보호
  • Key 노출 방지
  • 안전한 Build

Docker Buildx Bake GitLab CI Attestation 적용

보안 강화 환경에서는 Build 검증 정보를 생성할 수 있습니다.

예:

build:

  script:

    - docker buildx bake production \
      --push \
      --attest type=provenance \
      --attest type=sbom

결과:

Docker Image

+

SBOM

+

Provenance

↓

Registry 저장

Docker Buildx Bake GitLab CI 실무 예제

.gitlab-ci.yml

image: docker:latest


services:

  - docker:dind


stages:

  - build


docker-build:

  stage: build


  script:

    - docker login 
      -u $CI_REGISTRY_USER 
      -p $CI_REGISTRY_PASSWORD 
      $CI_REGISTRY

    - docker buildx create --use

    - docker buildx bake production --push

동작:

Code Push

↓

GitLab Runner 실행

↓

Buildx 생성

↓

Bake Build

↓

Registry Push

Docker Buildx Bake GitLab CI 확인 방법

Pipeline 확인:

GitLab Repository

CI/CD

Pipelines

Image 확인:

docker buildx imagetools inspect image-name

확인:

  • Image Tag
  • Platform
  • Digest
  • Attestation

Docker Buildx Bake GitLab CI 문제 해결

Docker Buildx 명령어 오류

확인:

docker buildx version

Buildx 설치 상태 확인

Docker-in-Docker 오류

확인:

  • privileged 설정
  • Docker Service 실행 여부

Registry Push 실패

확인:

  • CI Variables
  • Registry 권한
  • Login 정보

Docker Buildx Bake GitLab CI 사용 시 주의사항

첫 번째는 Runner 환경을 동일하게 유지해야 합니다.

두 번째는 Registry 인증 정보를 Variables로 관리해야 합니다.

세 번째는 Production Pipeline과 테스트 Pipeline을 분리하는 것이 좋습니다.

네 번째는 Cache와 보안 검증 단계를 함께 구성하는 것이 좋습니다.

Best Practice

Docker Buildx Bake GitLab CI 활용 방법:

  • Git Push 자동 Build
  • Registry 자동 Push
  • Cache 적용
  • Multi-platform Build
  • Secret 관리
  • SBOM/Provenance 적용

자주 묻는 질문

Docker Buildx Bake를 GitLab CI에서 사용할 수 있나요?

가능합니다.

GitLab Runner 환경에서 자동 Docker Build를 구성할 수 있습니다.

GitHub Actions와 차이는 무엇인가요?

둘 다 CI/CD 자동화 도구이며 GitLab 환경에서는 GitLab CI를 많이 사용합니다.

Multi-platform Build도 가능한가요?

가능합니다.

Buildx와 QEMU 환경을 활용할 수 있습니다.

Production 배포 자동화도 가능한가요?

가능합니다.

Build → Registry Push → Deploy Pipeline으로 확장할 수 있습니다.

마무리

Docker Buildx Bake GitLab CI 연동은 서버 운영 환경에서 안정적인 Docker Build 자동화를 구성하는 핵심 방법입니다.

GitLab Runner와 Buildx Bake를 활용하면 코드 변경부터 Image 생성, Registry Push, 보안 검증까지 자동화할 수 있으며 반복적인 서버 관리 작업을 크게 줄일 수 있습니다.

특히 기업 서버, DevOps 환경, Kubernetes 운영에서는 CI/CD Pipeline 구축이 필수이며 Docker Buildx Bake와 GitLab CI 조합은 강력한 자동화 구조를 제공합니다.

댓글 남기기