추가 컨텍스트와 함께 Bake 사용하기

추가 컨텍스트와 함께 Bake 사용하기 (Using Bake with additional contexts)

Bake에서는 빌드 명령의 --build-context 플래그처럼 빌드에 추가 컨텍스트를 넘겨줄 수 있어요. contexts 속성으로 특정 이름의 컨텍스트를 정의하면 Dockerfile에서 그 이름으로 참조할 수 있답니다.

출처: 문서

본문

지원되는 컨텍스트 값은 다음과 같아요:

  • 로컬 파일시스템 디렉터리 (Local filesystem directories)
  • 컨테이너 이미지 (Container images)
  • Git URL
  • HTTP URL
  • Bake 파일 안의 다른 타깃 이름 (Name of another target in the Bake file)

alpine 이미지 고정하기 (Pinning alpine image)

예를 들어 베이스 이미지에서 사용하는 alpine을 특정 버전으로 고정하고 싶다면, Dockerfile에서 그 컨텍스트 이름을 FROM으로 참조하면 돼요:

# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello world"
target "app" {
  contexts = {
    alpine = "docker-image://alpine:3.13"
  }
}

보조 소스 디렉터리 사용하기 (Using a secondary source directory)

빌드 컨텍스트에 포함되지 않은 별도 소스 디렉터리를 컨텍스트로 넘겨 COPY --from으로 가져올 수도 있어요:

FROM golang
COPY --from=src . .
# `docker buildx bake app` 실행 시 src는 이전 빌드 스테이지를 가리키는 게 아니라,
# 컨텍스트에 포함되지 않은 클라이언트 파일시스템을 가리킵니다.
target "app" {
  contexts = {
    src = "../path/to/source"
  }
}

타깃을 빌드 컨텍스트로 사용하기 (Using a target as a build context)

target: 접두어를 쓰면 다른 타깃의 빌드 결과를 컨텍스트로 사용할 수 있어요:

FROM scratch
# syntax=docker/dockerfile:1
FROM baseapp
RUN echo "Hello world"
target "base" {
  dockerfile = "baseapp.Dockerfile"
}

target "app" {
  contexts = {
    baseapp = "target:base"
  }
}

대부분의 경우에는 여러 타깃을 가진 단일 멀티스테이지 Dockerfile을 쓰는 것이 더 좋아요. 이 방식은 쉽게 하나로 합치기 어려운 여러 개의 Dockerfile이 있을 때만 권장돼요.

더 알아보기 (Learn more)