Docker Buildx Bake Build Args 사용법 완벽 가이드! 빌드 변수 전달하기

Docker Image를 Build할 때 환경에 따라 다른 값을 사용해야 하는 경우가 많습니다.

예:

  • 개발 환경 설정
  • 운영 환경 설정
  • Application 버전
  • API 주소
  • Build 옵션
  • Package 버전

하지만 이러한 값을 Dockerfile에 직접 고정하면 환경별 관리가 어려워집니다.

예:

FROM node:20

ENV APP_ENV=production

문제:

개발 환경 변경

↓

Dockerfile 수정 필요

↓

재Build 필요

Docker Buildx Bake에서는 Build Args 기능을 사용하여 Build 과정에서 필요한 값을 동적으로 전달할 수 있습니다.

예:

docker-bake.hcl

target "app" {

  args = {

    APP_ENV = "production"

    VERSION = "1.0.0"

  }

}

Dockerfile:

FROM node:20

ARG APP_ENV

ARG VERSION

RUN echo $APP_ENV

RUN echo $VERSION

실행:

docker buildx bake app

결과:

Build Argument 전달

↓

Dockerfile 사용

↓

Image 생성

이번 글에서는 Docker Buildx Bake Build Args의 개념부터 ARG와 ENV 차이, 환경별 설정, CI/CD 활용, 실무 구성 방법까지 자세히 알아보겠습니다.

Docker Buildx Bake Build Args란 무엇인가?

Docker Buildx Bake Build Args는 Docker Build 과정에서 Dockerfile로 값을 전달하는 기능입니다.

기본 구조:

docker-bake.hcl

↓

Build Args 전달

↓

Dockerfile ARG 사용

↓

Image Build

즉, 같은 Dockerfile을 사용하면서 Build 상황에 따라 다른 값을 적용할 수 있습니다.

Docker Buildx Bake Build Args가 필요한 이유

고정된 Dockerfile:

FROM ubuntu

RUN install production-package

문제:

  • 개발 환경 적용 어려움
  • 테스트 환경 분리 어려움
  • 여러 Dockerfile 필요

Build Args 사용:

하나의 Dockerfile

↓

환경별 값 전달

↓

여러 환경 Build 가능

장점:

  • Dockerfile 재사용
  • 환경별 Build 가능
  • CI/CD 자동화 편리
  • 설정 관리 단순화

Docker Buildx Bake Build Args 기본 설정

docker-bake.hcl:

target "app" {

  args = {

    NODE_VERSION = "20"

  }

}

Dockerfile:

ARG NODE_VERSION

FROM node:${NODE_VERSION}

실행:

docker buildx bake app

결과:

NODE_VERSION=20

↓

node:20 Image 사용

Docker Buildx Bake Build Args Dockerfile ARG 사용법

Dockerfile:

FROM ubuntu

ARG APP_VERSION

RUN echo "Version: $APP_VERSION"

Bake:

target "app" {

  args = {

    APP_VERSION = "2.0.0"

  }

}

Build 결과:

Version: 2.0.0

Docker Buildx Bake Build Args와 ENV 차이

ARG와 ENV는 비슷하지만 목적이 다릅니다.

ARG

Build 과정에서만 사용합니다.

예:

ARG VERSION

RUN echo $VERSION

특징:

  • Build 시 사용
  • Image 실행 후 유지되지 않음

ENV

Image 실행 환경에서도 유지됩니다.

예:

ENV APP_ENV=production

특징:

  • Container 실행 시 사용
  • Image 내부 저장

비교:

기능ARGENV
Build 사용가능가능
Container 실행 후 사용불가능가능
Image 저장일부 Metadata저장됨

Docker Buildx Bake Build Args 여러 개 사용하기

여러 값을 동시에 전달할 수 있습니다.

예:

target "production" {

  args = {

    APP_ENV = "production"

    APP_VERSION = "1.5.0"

    DEBUG = "false"

  }

}

Dockerfile:

ARG APP_ENV

ARG APP_VERSION

ARG DEBUG

환경 설정을 체계적으로 관리할 수 있습니다.

Docker Buildx Bake Build Args 환경별 설정

개발 환경:

target "dev" {

  args = {

    APP_ENV = "development"

  }

}

운영 환경:

target "production" {

  args = {

    APP_ENV = "production"

  }

}

실행:

개발:

docker buildx bake dev

운영:

docker buildx bake production

같은 Dockerfile로 환경을 분리할 수 있습니다.

Docker Buildx Bake Build Args와 Target 상속 활용

공통 설정:

target "base" {

  args = {

    NODE_VERSION = "20"

  }

}

개발:

target "dev" {

  inherits = [

    "base"

  ]

  args = {

    APP_ENV = "dev"

  }

}

운영:

target "production" {

  inherits = [

    "base"

  ]

  args = {

    APP_ENV = "prod"

  }

}

공통 값과 환경별 값을 분리할 수 있습니다.

Docker Buildx Bake Build Args CI/CD 활용

CI/CD에서는 Build 정보를 동적으로 전달할 수 있습니다.

예:

- name: Build Image

  run: |

    docker buildx bake production

Bake:

target "production" {

  args = {

    BUILD_NUMBER = "123"

  }

}

활용:

  • Build 번호
  • Commit ID
  • Release 버전
  • 환경 정보

Docker Buildx Bake Build Args Git 정보 활용

Git Commit 정보를 Build Args로 전달할 수 있습니다.

예:

git rev-parse HEAD

결과:

a82fd91

Bake:

args = {

  GIT_COMMIT = "a82fd91"

}

Dockerfile:

ARG GIT_COMMIT

RUN echo $GIT_COMMIT

Image 생성 정보를 추적할 수 있습니다.

Docker Buildx Bake Build Args 실무 예제

프로젝트:

project/

├── Dockerfile

├── docker-bake.hcl

└── app/

docker-bake.hcl:

target "production" {

  tags = [

    "registry.company.com/app:v1"

  ]

  args = {

    APP_ENV = "production"

    APP_VERSION = "1.0.0"

    BUILD_NUMBER = "100"

  }

}

Dockerfile:

FROM node:20

ARG APP_ENV

ARG APP_VERSION

ARG BUILD_NUMBER

RUN echo $APP_ENV

RUN echo $APP_VERSION

RUN echo $BUILD_NUMBER

실행:

docker buildx bake production

결과:

환경 정보 전달

↓

Application Build

↓

Docker Image 생성

Docker Buildx Bake Build Args 문제 해결

ARG 값이 전달되지 않는 경우

확인:

ARG VERSION
RUN echo $VERSION

Bake 설정:

args = {

 VERSION = "1.0"

}

이름이 동일한지 확인합니다.

값 변경이 적용되지 않는 경우

확인:

  • Docker Build Cache
  • ARG 위치
  • Dockerfile 순서

필요 시:

docker buildx bake app --no-cache

Secret 정보를 ARG로 전달하는 경우

주의:

ARG TOKEN

↓

Image History 노출 가능

Secret은 Build Secret 기능을 사용하는 것이 좋습니다.

Docker Buildx Bake Build Args 사용 시 주의사항

첫 번째는 비밀번호와 API Key 같은 민감 정보는 ARG로 전달하지 않는 것이 좋습니다.

두 번째는 환경별 ARG 이름 규칙을 통일하는 것이 좋습니다.

세 번째는 Build Cache 영향을 고려해야 합니다.

네 번째는 CI/CD에서는 자동 값 주입 방식을 사용하는 것이 좋습니다.

Best Practice

Docker Buildx Bake Build Args 활용 방법:

  • 환경별 설정 분리
  • Version 정보 전달
  • CI/CD 자동 주입
  • Git 정보 기록
  • Target별 관리
  • Secret과 구분 사용

자주 묻는 질문

Docker Buildx Bake Build Args는 무엇인가요?

Docker Build 과정에서 Dockerfile로 값을 전달하는 기능입니다.

ARG와 ENV 차이는 무엇인가요?

ARG는 Build 전용이고 ENV는 Container 실행 환경에서도 유지됩니다.

API Key를 ARG로 전달해도 되나요?

권장하지 않습니다.

민감 정보는 Secret 기능을 사용하는 것이 안전합니다.

CI/CD에서도 사용할 수 있나요?

가능합니다.

Build 번호, Version, Commit 정보를 전달하는 용도로 많이 사용합니다.

마무리

Docker Buildx Bake Build Args는 하나의 Dockerfile을 다양한 환경에서 활용하기 위한 핵심 기능입니다.

개발, 테스트, 운영 환경마다 다른 값을 전달할 수 있어 Dockerfile 중복을 줄이고 Build 자동화를 쉽게 만들 수 있습니다.

특히 CI/CD 환경에서는 Version, Commit 정보, Build 번호 등을 자동으로 전달하여 체계적인 Image 관리가 가능합니다.

댓글 남기기