인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

hoonseung님의 프로필 이미지

작성한 질문수

개발자를 위한 쉬운 도커

멀티 스테이지 빌드(Multi-Stage Build)

도커 이미지 파일에서 질문 있습니다.

해결된 질문

작성

·

102

1

안녕하세요 강의 재밌게 듣고 있습니다.

멀티 스테이지 빌드 강의 부분 7분42초 경에 대해 궁금한 점이 있습니다.

멀티 스테이지 빌드는 빌드 스테이지 따로, 빌드한 아티팩트 실행 스테이지 따로 이렇게 진행되는 것으로 알고 있는데요 여기서 첫 번째 스테이지에서

FROM maven AS build 이렇게 주고

--from 으로 가져올 때 빌드 컨텍스트에서 가져오지 않고 스테이지에서 가져온다고 하였는데 여기서 스테이지가 이해가 가지 않는데 첫 번째 빌드 스테이지가 실행되고 난 뒤 해당 이미지 디렉토리에서 파일을 가져온다는 뜻인가요.?

답변 2

1

데브위키님의 프로필 이미지
데브위키
지식공유자

hoonseung님 안녕하세요, 데브위키입니다.


멀티 스테이지 빌드는 2개 이상의 임시 컨테이너를 순차적으로 실행하여 작업을 수행한 뒤, 마지막 스테이지에서 최종 이미지를 만듭니다.

예를 들어, Maven 이미지와 OpenJDK 이미지를 사용해서 멀티 스테이지 빌드를 한다고 가정해 보겠습니다.

먼저 Maven 이미지를 기반으로 한 첫 번째 스테이지에서 임시 컨테이너가 실행되고, 임시 디렉터리가 생성되어 애플리케이션을 빌드합니다. 작업이 완료되면 이 디렉터리에는 JAR 파일 같은 결과물이 남습니다.

이후 OpenJDK 이미지를 기반으로 한 두 번째 스테이지에서, 첫 번째 스테이지의 임시 디렉터리에 있는 JAR 파일을 복사하여 최종 실행 이미지를 만듭니다. 이렇게 하면 빌드에 사용된 도구(Maven)는 포함되지 않고, 필요한 실행 파일만 포함된 깔끔한 이미지가 만들어집니다.

강의 들으시면서 더 궁금하신 부분이 있으면 편하게 질문해주세요!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.
hoonseung님, 멀티 스테이지 빌드에 관한 질문 주셨네요.

멀티 스테이지 빌드는 Dockerfile 내에서 여러 개의 FROM 지시어를 사용하여 서로 다른 단계의 이미지를 생성하는 기법입니다. 이를 통해 필요한 애플리케이션 빌드를 수행한 후, 그 결과물만을 최종 이미지에 포함시켜 경량화할 수 있습니다.

  • FROM maven AS build: 이 구문은 빌드 단계에서 사용할 베이스 이미지를 지정하고 해당 단계를 build라는 이름으로 참조하게 만듭니다.
  • --from: 이후의 스테이지에서 특정 단계의 내용을 가져올 때 사용하는 옵션으로, 앞서 정의한 build 스테이지로부터 파일을 가져올 수 있습니다.

첫 번째 빌드 스테이지가 실행되고 나서, 그 스테이지의 결과물(예: JAR 파일)을 다음 스테이지로 넘겨주는 과정이 바로 여기서 말하는 “스테이지에서 가져오는 것”입니다. 즉, 처음에 빌드한 리소스를 두 번째 스테이지에서 사용하여 보다 최적화된 이미지를 만들어내는 것이죠.

이 방식의 주요 이점은 필요하지 않은 빌드 도구 및 라이브러리를 최종 이미지에서 제외함으로써, 이미지를 경량화하고 보안성을 높이는 데 있습니다.

이와 관련된 답변을 아래의 링크에서도 확인하실 수 있습니다:

  1. “멀티 스테이지 빌드 질문이있습니다!” - 여러 스테이지에서 최종 스테이지로만 이미지가 생성되는 이유와 과정에 대해 설명되어 있습니다.

hoonseung님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.