Docker Buildx Bake Output 사용법 완벽 가이드! Build 결과 저장 방식 관리하기

Docker Image를 Build할 때 최종 결과물을 어디에 저장할지 결정하는 것은 매우 중요합니다.

기본적인 Docker Build:

Docker Build

↓

Docker Image 생성

↓

Local Docker Engine 저장

하지만 실제 운영 환경에서는 다양한 저장 방식이 필요합니다.

예:

  • Docker Image 저장
  • Registry Push
  • Local 파일 저장
  • OCI Image 저장
  • Docker Archive 생성
  • CI/CD Artifact 저장

Docker Buildx Bake에서는 Output 옵션(output) 을 사용하여 Build 결과의 저장 위치와 형식을 지정할 수 있습니다.

예:

docker-bake.hcl

target "app" {

  output = [
    "type=image,name=company/app:latest,push=true"
  ]

}

실행:

docker buildx bake app

결과:

Docker Build

↓

Image 생성

↓

Registry Push

이번 글에서는 Docker Buildx Bake Output의 개념부터 Output 타입, Registry Push, Local 저장, CI/CD 활용까지 자세히 알아보겠습니다.

Docker Buildx Bake Output이란 무엇인가?

Docker Buildx Bake Output은 Build 결과물을 저장할 위치와 방식을 지정하는 기능입니다.

기본 구조:

Dockerfile

↓

Build 실행

↓

Output 설정

↓

결과 저장

Output을 통해 Build 결과가 어디로 이동할지 결정할 수 있습니다.

Docker Buildx Bake Output이 필요한 이유

일반 Docker Build:

docker build

↓

Local Image 저장

문제:

  • Registry Push 자동화 어려움
  • CI 환경 활용 어려움
  • Artifact 관리 어려움

Output 사용:

Docker Build

↓

원하는 저장 위치 선택

↓

자동 관리

장점:

  • Registry 자동 Push
  • 파일 저장 가능
  • CI/CD 활용 가능
  • 배포 자동화 가능

Docker Buildx Bake Output 기본 설정

docker-bake.hcl:

target "app" {

  output = [

    "type=docker"

  ]

}

실행:

docker buildx bake app

결과:

Docker Image

↓

Local Docker Engine 저장

Docker Buildx Bake Output 타입 종류

Docker Buildx에서는 여러 Output 타입을 제공합니다.

type=docker

Docker Engine에 Image 저장

예:

output = [

  "type=docker"

]

특징:

  • docker images 확인 가능
  • Local 테스트 적합

확인:

docker images

type=image

Image 형태로 출력

예:

output = [

  "type=image"

]

특징:

  • Registry Push 가능
  • Image Metadata 유지

예:

output = [

  "type=image,push=true"

]

type=registry

Registry 저장 방식

예:

output = [

  "type=image,push=true"

]

결과:

Build

↓

Image 생성

↓

Registry Push

운영 환경에서 가장 많이 사용합니다.


type=local

Local 파일 저장

예:

output = [

  "type=local,dest=./output"

]

결과:

output/

├── image

└── metadata

테스트와 Artifact 저장에 사용됩니다.


type=oci

OCI Image Format 저장

예:

output = [

  "type=oci,dest=image.tar"

]

활용:

  • Image 백업
  • 다른 시스템 이동

Docker Buildx Bake Output Registry Push 설정

운영 환경에서는 Build 후 Registry Push를 많이 사용합니다.

docker-bake.hcl:

target "production" {

  tags = [

    "registry.company.com/app:v1"

  ]

  output = [

    "type=image,push=true"

  ]

}

실행:

docker buildx bake production

결과:

Image Build

↓

Tag 적용

↓

Registry Push

Docker Buildx Bake Output과 Tags 함께 사용하기

Output은 Tag와 함께 사용하는 경우가 많습니다.

예:

target "app" {

  tags = [

    "company/app:v1.0.0"

  ]

  output = [

    "type=image,push=true"

  ]

}

흐름:

Build

↓

Tag 생성

↓

Push

Docker Buildx Bake Output Local 저장 활용

개발 환경에서는 Local 저장이 편리합니다.

설정:

target "test" {

  output = [

    "type=docker"

  ]

}

결과:

Build 완료

↓

docker images 확인 가능

테스트 목적에 적합합니다.

Docker Buildx Bake Output CI/CD 활용

CI 환경에서는 Registry 또는 Artifact 저장이 중요합니다.

GitHub Actions 예:

- name: Build Image

  run: |

    docker buildx bake production

Bake:

target "production" {

  output = [

    "type=image,push=true"

  ]

}

흐름:

Code Push

↓

Build

↓

Image 생성

↓

Registry 저장

Docker Buildx Bake Output Multi-platform 활용

Multi-platform Build에서는 Image Output을 사용해야 합니다.

예:

target "app" {

  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]


  output = [

    "type=image,push=true"

  ]

}

결과:

Image Manifest

├── amd64

└── arm64

Docker Buildx Bake Output 실무 예제

프로젝트:

project/

├── Dockerfile

├── docker-bake.hcl

└── deployment.yaml

docker-bake.hcl:

target "production" {

  tags = [

    "registry.company.com/backend:v1.0.0"

  ]


  platforms = [

    "linux/amd64",

    "linux/arm64"

  ]


  output = [

    "type=image,push=true"

  ]

}

실행:

docker buildx bake production

결과:

Docker Image 생성

↓

Multi-platform Manifest 생성

↓

Registry Push

Docker Buildx Bake Output 문제 해결

Image가 Local에 보이지 않는 경우

원인:

type=image 사용

확인:

docker images

Local 저장 필요 시:

output = [

"type=docker"

]

Registry Push 실패

확인:

docker login

Registry 인증 상태를 확인합니다.

Multi-platform 오류

확인:

output = [

"type=image,push=true"

]

Multi-platform은 Registry 저장 방식이 필요합니다.

Docker Buildx Bake Output 사용 시 주의사항

첫 번째는 목적에 맞는 Output 타입을 선택해야 합니다.

두 번째는 Multi-platform Build에서는 Registry Push 방식을 권장합니다.

세 번째는 Local 저장과 Registry 저장 방식을 구분해야 합니다.

네 번째는 CI/CD에서는 Artifact 관리 정책이 필요합니다.

Best Practice

Docker Buildx Bake Output 활용 방법:

  • 운영은 type=image 사용
  • Registry Push 자동화
  • 개발은 type=docker 활용
  • Artifact는 type=local 활용
  • Multi-platform은 Registry 저장
  • CI/CD Pipeline 연결

자주 묻는 질문

Docker Buildx Bake Output은 무엇인가요?

Docker Build 결과물을 어디에 저장할지 지정하는 기능입니다.

가장 많이 사용하는 Output은 무엇인가요?

운영 환경에서는 type=image,push=true 방식을 많이 사용합니다.

Local Docker에 저장할 수 있나요?

가능합니다.

type=docker를 사용하면 됩니다.

Multi-platform Image도 저장할 수 있나요?

가능합니다.

Registry Push 방식으로 관리하는 것이 일반적입니다.

마무리

Docker Buildx Bake Output은 Docker Image Build 결과를 원하는 형태로 관리하기 위한 핵심 기능입니다.

Local 테스트부터 Registry 배포, CI/CD Artifact 저장까지 다양한 환경에 맞게 Output 방식을 선택할 수 있습니다.

특히 운영 환경에서는 Image Push 설정과 Multi-platform Output 구성을 활용하면 안정적인 Docker 배포 시스템을 구축할 수 있습니다.

댓글 남기기