docker buildx bake

docker buildx bake

docker buildx bake는 빌드 정의 파일(bake 파일)을 바탕으로 고수준 빌드를 수행하는 명령이에요. 지정한 각 target이 빌드의 일부로 병렬 실행돼요.

출처: 문서

본문

[!NOTE] buildx bake 명령은 필요에 따라 향후 이전 버전과 호환되지 않는 기능이 추가될 수 있어요. 명령 개선과 기능 확장에 대한 피드백을 찾고 있어요.

Bake는 고수준 빌드 명령이에요. 지정한 target이 각각 병렬로 실행돼요. bake 파일 작성에 대한 소개는 High-level build options with Bake 가이드를 참고해요.

지원하는 옵션은 다음과 같아요.

옵션 기본값 설명
--allow 추가 권한(entitlement)을 명시적으로 허용해요 (예: network.host, security.insecure)
--call build 빌드를 평가하는 메서드를 설정해요 (check, outline, targets)
--check --call=check의 축약형이에요
-f, --file 빌드 정의 파일
--list target 또는 변수 목록을 보여줘요
--load --output=type=docker의 축약형이에요
--metadata-file 빌드 결과 메타데이터를 파일에 기록해요
--no-cache 이미지를 빌드할 때 캐시를 사용하지 않아요
--policy 정책 구성 (형식: filename=path[,filename=path]...)
--print 빌드하지 않고 옵션만 출력해요
--progress auto 진행 출력 유형을 설정해요 (auto, none, plain, quiet, rawjson, tty)
--provenance --attest=type=provenance의 축약형이에요
--pull 생성 전에 이미지를 가져올지 정해요 (always, missing, never)
--push --output=type=registry,unpack=false의 축약형이에요
--sbom --attest=type=sbom의 축약형이에요
--set target 값을 덮어써요 (예: targetpattern.key=value)
--var 변수 값을 설정해요 (예: name=value)

Allow extra privileged entitlement (--allow)

Entitlement는 권한이 필요한 작업에 통제된 접근을 제공하기 위한 것이에요. 기본적으로 Buildx와 BuildKit은 제한된 권한으로 동작해서 사용자와 시스템을 의도하지 않은 부작용이나 보안 위험으로부터 보호해요. --allow 플래그는 추가 entitlement에 대한 접근을 명시적으로 허용해, 빌드나 bake 작업에 높은 권한이 필요할 때 이를 분명히 드러내요.

BuildKit의 network.host, security.insecure entitlement 외에도 Bake는 파일시스템 entitlement를 지원해서 파일시스템 접근을 세밀하게 제어할 수 있어요. 특히 기본 작업 디렉터리 밖 파일에 접근해야 하는 빌드에서 유용해요.

Bake가 지원하는 파일시스템 entitlement는 다음과 같아요.

  • --allow fs=<path|*> - 작업 디렉터리 밖 파일에 읽기·쓰기 접근을 부여해요.
  • --allow fs.read=<path|*> - 작업 디렉터리 밖 파일에 읽기 접근을 부여해요.
  • --allow fs.write=<path|*> - 작업 디렉터리 밖 파일에 쓰기 접근을 부여해요.

fs entitlement는 파일시스템의 디렉터리 경로(상대 또는 절대)를 값으로 받아요. 또는 와일드카드(*)를 넘겨 Bake가 전체 파일시스템에 접근하도록 허용할 수 있어요.

Bake는 --allow=buildx.local.delete도 지원해서 mode=delete가 설정됐을 때 로컬 출력이 오래된 파일을 삭제할 권한을 부여해요.

Example: fs.read

다음 Bake 구성이 있다고 할게요. Bake는 bake 파일 기준 상위 디렉터리에 접근해야 해요.

target "app" {
  context = "../src"
}

docker-bake.hcl 파일이 있는 디렉터리에서 docker buildx bake app을 실행한다면, ../src 디렉터리를 읽는 것을 명시적으로 허용해야 해요. 이 경우 다음 호출이 모두 동작해요.

$ docker buildx bake --allow fs.read=* app
$ docker buildx bake --allow fs.read=../src app
$ docker buildx bake --allow fs=* app

Example: fs.write

다음 docker-bake.hcl 파일은 /tmp 디렉터리에 쓰기 접근이 필요해요.

target "app" {
  output = "/tmp"
}

/tmp 디렉터리 밖에서 docker buildx bake app을 실행한다면, 경로를 지정하거나 와일드카드를 써서 fs.write entitlement를 허용해야 해요.

$ docker buildx bake --allow fs=/tmp app
$ docker buildx bake --allow fs.write=/tmp app
$ docker buildx bake --allow fs.write=* app

Override the configured builder instance (--builder)

buildx --builder와 동일해요.

Invoke a frontend method (--call)

build --call과 동일해요.

Call: check (--check)

build --check과 동일해요.

Specify a build definition file (-f, --file)

-f / --file 옵션으로 사용할 빌드 정의 파일을 지정해요. 파일은 HCL, JSON 또는 Compose 파일일 수 있어요. 파일을 여러 개 지정하면 모두 읽고 빌드 구성을 결합해요.

더 알아보기