2.4. 다단계 빌드가 포함된 사용자 정의 부팅 가능한 이미지의 이점


배포 이미지에는 빌드 툴 또는 불필요한 라이브러리를 추가하지 않고도 애플리케이션과 필수 런타임만 포함해야 합니다. 이를 위해 두 단계의 Containerfile: 하나의 스테이지를 사용하여 아티팩트를 빌드하고 애플리케이션을 호스팅하십시오.

다중 단계 빌드에서는 Containerfile 에서 여러 FROM 명령을 사용합니다. 각 FROM 명령은 다른 기반을 사용할 수 있으며 각 명령은 빌드의 새 단계를 시작합니다. 아티팩트를 한 단계에서 다른 단계로 선택적으로 복사하고 최종 이미지에 필요하지 않은 모든 항목을 제외할 수 있습니다.

다단계 빌드는 다음과 같은 몇 가지 이점을 제공합니다.

작은 이미지 크기
빌드 환경을 런타임 환경에서 분리하면 필요한 파일과 종속 항목만 최종 이미지에 포함되어 크기를 크게 줄일 수 있습니다.
보안 개선
빌드 도구 및 불필요한 라이브러리는 최종 이미지에서 제외되므로 공격 면적이 줄어들어 더 안전한 컨테이너가 생성됩니다.
최적화된 성능
이미지 크기가 작으면 컨테이너화된 애플리케이션의 전반적인 효율성을 개선하여 다운로드, 배포 및 시작 시간이 빨라집니다.
단순화된 유지 관리
빌드 및 런타임 환경이 분리되어 있으면 최종 이미지가 더 깔끔하고 유지 관리하기 쉬워 애플리케이션을 실행하는 데 필요한 항목만 포함됩니다.
cleaner 빌드
다단계 빌드는 빌드 프로세스 중에 누적될 수 있는 중간 파일에서 혼동을 방지하여 필수 아티팩트만 최종 이미지로 만들 수 있도록 합니다.
리소스 효율성
한 단계에서 빌드하고 불필요한 부분을 삭제하는 기능을 통해 배포 중 스토리지 및 대역폭 사용을 최소화할 수 있습니다.
계층 캐싱 개선
Podman은 명확하게 정의된 단계를 통해 이전 단계의 결과를 효율적으로 캐시하여 향후 빌드 속도를 높일 수 있습니다.

다음 Containerfile 은 다음 두 단계로 구성됩니다. 첫 번째 단계는 일반적으로 builder 라고 하며 golang 바이너리를 컴파일합니다. 두 번째 단계는 첫 번째 단계에서 바이너리를 복사합니다. go-toolset 빌더의 기본 작업 디렉터리는 opt/ap-root/src 입니다.

FROM registry.access.redhat.com/ubi10/go-toolset:latest as builder
RUN echo 'package main; import "fmt"; func main() { fmt.Println("hello world") }' > helloworld.go
RUN go build helloworld.go

FROM registry.redhat.io/rhel10/rhel-bootc:latest
COPY --from=builder /opt/app-root/src/helloworld /
CMD ["/helloworld"]
Copy to Clipboard Toggle word wrap

결과적으로 최종 컨테이너 이미지에 helloworld 바이너리가 포함되지만 이전 단계의 데이터는 포함되지 않습니다.

다중 단계 빌드를 사용하여 다음 시나리오를 수행할 수도 있습니다.

특정 빌드 단계에서 중지
이미지를 빌드할 때 지정된 빌드 단계에서 중지할 수 있습니다. 예를 들면 다음과 같습니다.
$ podman build --target build -t hello .
Copy to Clipboard Toggle word wrap

예를 들어 이 방법을 사용하여 특정 빌드 단계를 디버깅할 수 있습니다.

외부 이미지를 스테이지로 사용
COPY --from 명령을 사용하여 로컬 이미지 이름, 로컬 또는 컨테이너 레지스트리에서 사용 가능한 태그 또는 태그 ID를 사용하여 별도의 이미지에서 복사할 수 있습니다. 예를 들면 다음과 같습니다.
COPY --from=<image> <source_path> <destination_path>
Copy to Clipboard Toggle word wrap
이전 단계를 새 단계로 사용
FROM 명령을 사용하여 이전 단계가 종료된 위치를 계속할 수 있습니다. 예를 들면 다음과 같습니다.
FROM ubi10 AS stage1
[...]

FROM stage1 AS stage2
[...]

FROM ubi10 AS final-stage
[...]
Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat