개발자
React 프로젝트를 빌드했을 때와 React + Nginx 기반 프로젝트를 Dockerfile로 build시 두 작업의 시간 차이가 많이 나는 상황입니다. docker 이미지 빌드시 npm run build 커맨드 실행에 거의 모든 시간이 소모됩니다. 그래서 react 빌드 시간을 줄이기 위한 esbuild 적용, webpack 커스터마이징 및 dockerfile 최적화를 위한 dockerfile 멀티 스테이지 적용, 이미지 캐시 레이어 사용을 위한 dockerfile 스크립트 수정도 해봤습니다. 그런데도 일반 build(react 프로젝트 build 약 40초)와 docker 이미지 빌드(약 8분) 시간의 차이가 많이 나는데 차이가 많이 나는 원인을 파악하는 방법이 뭐가 있을까요?? dockerfile 스크립트도 참고로 올려봅니다.
1FROM node:16.11.0-alpine as builder
2
3WORKDIR /usr/src/app
4
5COPY package*.json ./
6
7RUN npm i --legacy-peer-deps
8
9COPY . .
10RUN npm run build
11
12# run stage
13FROM nginx:1.23-alpine
14
15CMD [ "/bin/bash", "-c", "/usr/share/nginx/html/env-creator.sh && nginx -g 'daemon off;'" ]
16
17ENV REACT_APP_API_MIN_DATE_NUM="1" \
18 REACT_APP_API_MIN_DATE_UNIT="year"
19
20COPY default.conf /etc/nginx/conf.d/
21
22WORKDIR /usr/share/nginx/html
23
24COPY --from=builder /usr/src/app/build .
25
26COPY .env .
27
28COPY --chmod=0755 ./env-creator.sh .
29
30
31RUN apk add --no-cache bash
32
33EXPOSE 80
답변 2
package-lock.json 파일과 node_modules 디렉토리가 도커 볼륨에 보존 되어 있어야(또는 도커 볼륨에 복사) 프로젝트에서 사용중인 패키지를 매번 재설치하지 않습니다. 도커 빌드할때마다 패키지를 다운로드하고 있어 시간이 많이 소모되는 것으로 추측됩니다.
익명
작성자
2023년 10월 25일
먼저 답변 감사드리며 추가 질문이 있습니다. 7번째 줄인 패키지를 다운로드 하는 과정에서 캐시가 적용되어도 도커 빌드 시간이 오래 걸리던데 이런 경우는 어떤 경우일까요??
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 10월 24일
Docker 이미지를 빌드할 때 시간이 오래 걸리는 원인은 여러 가지가 있을 수 있습니다. 1. **코드 복사와 npm 설치**: Dockerfile에서 `COPY . .` 후에 `npm i --legacy-peer-deps`으로 npm 패키지들을 다시 fetch하여 설치하고 있는데요, 이 단계에서 시간이 상당히 소요될 수 있습니다. 코드 복사는 파일 수량과 용량에 따라 시간이 달라집니다. 가능하다면 `.dockerignore` 파일을 활용해 불필요한 파일 / 폴더를 제외하는 것도 도움이 됩니다. 2. **빌드 최적화**: 해당 프로젝트의 webpack 설정, Babel 설정 등에 따라서도 빌드 시간이 달라집니다. 가능하다면 빌드 과정을 분석하여 최적화할 부분이 있는지 확인해보실 것을 추천합니다. 3. **멀티 스테이징**: 멀티 스테이징 빌드는 이미지 사이즈를 줄여주긴 하지만, 실제 빌드하는 시간 자체는 크게 단축되지 않습니다. 4. **캐싱 문제**: Docker는 캐시 메커니즘을 통해 이미 수행된 명령들은 건너뛰고 빌드할 수 있습니다. 그러나 `COPY . .`에서 변경 사항이 감지되면 이후의 모든 단계는 캐시되지 않고 새로 실행됩니다. 5. **네트워크 문제**: Docker 이미지 빌드 시에는 Node.js 패키지들을 다운받아야 하는 등의 네트워크 활동이 많이 발생합니다. 네트워크 속도가 느리거나 불안정하다면 이로 인해 시간이 오래 걸릴 수 있습니다. 변경사항이 크게 없음에도 Docker 이미지 빌드에 시간이 오래 걸린다면, 웹팩 설정을 분석해보거나, 어떤 단계에서 가장 많은 시간이 소요되고 있는지 파악하기 위해 docker build 과정을 상세하게 로깅해서 확인해 보는 방법을 추천 드립니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!