Docker Buildx Bake CI/CD 자동화 사용법 완벽 가이드! GitHub Actions와 연동하기

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을 구축할 수 있습니다.

댓글 남기기