코딩과로그

[기록용] Multi-Stage Build (feat: Frontend 배포) 본문

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;"]

두번째 스테이지로 가면 기존(첫번째)의 스테이지는 이미지 결과물에 저장되지 않는다.

다만 첫번째 스테이지에서 나온 결과물을 두번째 스테이지에서 받아서 사용이 가능하다.

두번째 스테이지의 결과물이 최종 이미지가 된다.