Docker
[기록용] Multi-Stage Build (feat: Frontend 배포)
피리음
2023. 4. 4. 04:42
도커 파일로 이미지를 만들 때,
'빌드 할 때의 필요한 라이브러리'를 사용하고 사용한 라이브러리는 이미지에 포함시키고 싶지 않을 때 어떻게 할까?
멀티 스테이지 방식으로 구현이 가능하다.
아래와 같이 두개의 스테이지로 나눌 수 있다.
# 첫번째 스테이지
# build-stage라는 tag의 스테이지
FROM node:14-alpine as build-stage
WORK /app
COPY package.json .
RUN npm install
COPY . .
# /app/build 폴더에 결과물이 빌드되어 나옴.
RUN npm run build
# 두번째 스테이지
FROM nginx:stable-alpine
# build-stage에서 나온 결과값을 복사함.
COPY --from=build-stage /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "demon off;"]
두번째 스테이지로 가면 기존(첫번째)의 스테이지는 이미지 결과물에 저장되지 않는다.
다만 첫번째 스테이지에서 나온 결과물을 두번째 스테이지에서 받아서 사용이 가능하다.
두번째 스테이지의 결과물이 최종 이미지가 된다.