Docker Buildx Bake Output 사용법 완벽 가이드! 빌드 결과 저장하기

Docker 이미지를 빌드할 때 단순히 이미지를 생성하는 것뿐만 아니라 빌드 결과물을 원하는 형태로 저장하거나 다른 시스템에서 활용해야 하는 경우가 많습니다.

예:

  • Docker 이미지 저장
  • 파일 시스템으로 결과 출력
  • OCI 이미지 생성
  • Tar 파일 생성
  • CI/CD Artifact 저장
  • 배포용 결과물 관리

기본 Docker Build는 일반적으로 Docker Image만 생성합니다.

하지만 Docker Buildx Bake에서는 Output 설정을 활용하여 빌드 결과를 원하는 방식으로 저장할 수 있습니다.

예:

docker-bake.hcl

target "app" {

  output = [
    "type=docker"
  ]

}

또는:

docker buildx bake
–set *.output=type=local,dest=./result

빌드 결과를 원하는 위치와 형식으로 저장할 수 있습니다.

이번 글에서는 Docker Buildx Bake Output의 개념부터 Output 종류, 이미지 저장 방법, 파일 출력, CI/CD 활용 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake Output이란 무엇인가?

Docker Buildx Bake Output은 빌드 결과물을 어디에 어떤 형식으로 저장할지 지정하는 기능입니다.

기본 구조:

Docker Build 실행

Output 설정 확인

결과물 저장

예:

Docker Image

↓

Docker Engine 저장


또는


파일 시스템

↓

Artifact 저장

프로젝트 목적에 맞게 다양한 출력 방식을 선택할 수 있습니다.

Docker Buildx Bake Output이 필요한 이유

일반적인 Docker Build:

docker buildx build -t app:v1 .

결과:

Docker Image 생성

하지만 실제 운영 환경에서는 다음과 같은 요구가 있습니다.

  • 빌드 파일 추출
  • 이미지 백업
  • 다른 서버 전달
  • CI 결과 저장
  • Registry 업로드

Output을 사용하면:

Build 결과

↓

원하는 저장 방식 선택

↓

자동 관리

할 수 있습니다.

Docker Buildx Bake Output 기본 사용법

docker-bake.hcl:

target "app" {

  output = [
    "type=docker"
  ]

}

실행:

docker buildx bake app

결과:

Docker Engine에 이미지 저장

Docker Buildx Bake Output 주요 종류

Docker Buildx Bake에서 많이 사용하는 Output 유형:

type=docker

Docker Engine에 이미지 저장

예:

output = [
  "type=docker"
]

활용:

  • 로컬 테스트
  • Docker 실행 확인
  • 개발 환경

확인:

docker images

type=registry 사용법

Registry에 이미지를 저장합니다.

예:

output = [
  "type=registry"
]

활용:

  • Docker Hub
  • Private Registry
  • Kubernetes 배포

일반적으로 운영 환경에서는 --push 방식과 함께 많이 사용합니다.

type=local 사용법

빌드 결과를 로컬 폴더에 저장합니다.

예:

output = [
  "type=local,dest=./result"
]

결과:

result/

├── 파일

└── 빌드 결과

활용:

  • 정적 파일 생성
  • CI Artifact 저장
  • 배포 파일 추출

type=tar 사용법

Docker 결과물을 Tar 파일로 저장합니다.

예:

output = [
  "type=tar,dest=image.tar"
]

결과:

image.tar

활용:

  • 이미지 이동
  • 백업
  • 오프라인 배포

type=oci 사용법

OCI 표준 이미지 형식으로 출력합니다.

예:

output = [
  "type=oci,dest=image.tar"
]

활용:

  • 컨테이너 표준 호환
  • 다른 Container Runtime 사용

Docker Buildx Bake Output 설정 예제

docker-bake.hcl:

target "app" {

  context = "."

  tags = [
    "company/app:v1"
  ]

  output = [
    "type=docker"
  ]

}

실행:

docker buildx bake app

결과:

company/app:v1

로컬 Docker 환경에 저장됩니다.

Docker Buildx Bake Output 여러 개 사용하기

하나의 Target에서 여러 Output을 지정할 수 있습니다.

예:

target "app" {

  output = [
    "type=docker",
    "type=local,dest=./result"
  ]

}

결과:

  • Docker Image 생성
  • 파일 결과 저장

여러 형태의 결과물을 동시에 관리할 수 있습니다.

Docker Buildx Bake Output과 CI/CD 활용

CI/CD 환경에서는 빌드 결과물을 Artifact로 저장하는 경우가 많습니다.

예:

target "app" {

  output = [
    "type=local,dest=./artifact"
  ]

}

Pipeline:

코드 다운로드

↓

Docker Build 실행

↓

Output 생성

↓

Artifact 저장

↓

배포

활용:

  • 빌드 파일 전달
  • 배포 자동화
  • 결과물 보관

Docker Buildx Bake Output과 Multi-platform 빌드

멀티 플랫폼 이미지를 만들 때 Output 선택은 중요합니다.

예:

target "app" {

  platforms = [
    "linux/amd64",
    "linux/arm64"
  ]

  output = [
    "type=registry"
  ]

}

Registry에 여러 플랫폼 이미지를 저장할 수 있습니다.

Docker Buildx Bake Output 실무 활용 예제

정적 웹 사이트 빌드

Dockerfile:

FROM node

RUN npm install

RUN npm run build

Bake:

target "frontend" {

  output = [
    "type=local,dest=./dist"
  ]

}

결과:

dist/

├── index.html

└── assets

웹 배포 파일로 사용할 수 있습니다.

Linux 서버 문제 해결

Docker 빌드 후 이미지가 아닌 결과 파일이 필요했습니다.

기존:

docker buildx bake

문제:

  • 이미지 생성만 가능
  • 파일 추출 어려움

Output 적용:

docker-bake.hcl

target "app" {

  output = [
    "type=local,dest=./build"
  ]

}

실행:

docker buildx bake

결과:

build/

폴더 생성

필요한 빌드 결과물을 바로 사용할 수 있었습니다.

Docker Buildx Bake Output 사용 시 주의사항

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

두 번째는 Multi-platform 빌드에서는 Registry Output 사용이 적합합니다.

세 번째는 Local Output 경로 관리를 해야 합니다.

네 번째는 CI/CD 환경에서는 Artifact 저장 정책이 필요합니다.

Best Practice

Docker Buildx Bake Output 활용 방법:

  • 로컬 테스트는 type=docker 사용
  • 운영 배포는 Registry 사용
  • 파일 추출은 type=local 사용
  • 이미지 백업은 type=tar 활용
  • 표준 이미지 관리는 type=oci 활용
  • CI Artifact와 연결

자주 묻는 질문

Docker Buildx Bake Output은 무엇인가요?

Docker 빌드 결과물을 원하는 위치와 형식으로 저장하는 기능입니다.

이미지도 저장할 수 있나요?

가능합니다.

type=docker 또는 type=registry를 사용할 수 있습니다.

파일 형태로 결과물을 만들 수 있나요?

가능합니다.

type=local을 사용하면 됩니다.

운영 환경에서는 어떤 Output을 사용하나요?

일반적으로 Registry Output을 사용하여 Docker Registry에 저장합니다.

마무리

Docker Buildx Bake Output은 Docker 빌드 결과를 효율적으로 관리하기 위한 중요한 기능입니다.

단순히 이미지를 생성하는 것을 넘어 파일 출력, Registry 저장, OCI 이미지 생성 등 다양한 방식으로 결과물을 관리할 수 있습니다.

특히 CI/CD 환경에서는 빌드 결과를 Artifact로 저장하거나 배포 과정과 연결할 수 있어 자동화된 Docker 운영 환경 구축에 매우 유용합니다.

Docker Buildx Bake Output을 적절하게 활용하면 개발 환경부터 운영 배포까지 더욱 체계적인 이미지 관리 시스템을 구축할 수 있습니다.

댓글 남기기