[docker] 멀티 스테이지 빌드

JH Bang·2023년 5월 15일
0

개발 지식

목록 보기
10/11

도커는 여러 단계에 걸쳐서 이미지를 가져오고 필요한 결과물만 포함시켜 이미지를 빌드할 수 있다. 다음 예시를 보자.

# Stage 0
FROM node:18.15.0-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Stage 1
FROM nginx:1.23.4-alpine
COPY --from=0 /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 컨테이너가 시작될 때 실행할 명령어
CMD ["nginx", "-g", "daemon off;"]

이 중 COPY --from=0 에 주목해보자.
--from=0 옵션 명령어는 멀티 스테이지 빌드(Multi-stage build)에서 사용되는 문법이다. 멀티 스테이지 빌드를 사용하면, 여러 개의 이미지를 한 개의 Dockerfile로 구성하고, 각 스테이지에서 빌드한 결과물을 다음 스테이지로 전달할 수 있다. 이를 통해 최종적으로 생성되는 이미지의 크기를 줄이고 더 효율적인 빌드 과정을 구현할 수 있다.

좀더 자세히 살펴보자.

COPY --from=0 /app/build /usr/share/nginx/html 에서

--from=0: 이 플래그는 이전 스테이지에서 생성된 파일이나 디렉토리를 현재 스테이지로 복사하는 것을 뜻한다.
여기서 0은 이전 스테이지를 가리키는 인덱스로, Dockerfile의 첫 번째 FROM 문에 해당한다.

따라서 첫 번째 스테이지(Node.js 이미지를 기반으로 하는 스테이지)에서 빌드된 React 앱의 결과물을 두 번째 스테이지(Nginx 이미지를 기반으로 하는 스테이지)로 전달하고, 최종적으로 생성되는 Docker 이미지에 포함시킨다.

이렇게 함으로써 빌드 도구와 관련된 불필요한 파일들은 제외된다.

profile
의지와 행동

0개의 댓글