클라우드와 컨테이너의 기초
FROM node:lts
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["node", "dist/server.js"]위의 Dockerfile(B)은 COPY . . 뒤에 RUN npm ci를 두었던 Dockerfile(A)을, 의존성 파일만 먼저 복사하는 순서로 바꾼 것이다. npm ci에는 120초, npm run build에는 30초, COPY . .에는 2초가 걸리고, 다른 명령의 시간은 무시할 수 있다고 하자. 하루에 20회, src 아래의 소스 코드만 바꾸어(package.json과 package-lock.json은 바꾸지 않고) 이미지를 다시 만든다. 이전 빌드의 캐시를 사용할 수 있을 때, 하루 빌드 시간의 합계에서 B가 A보다 짧아지는 시간으로 올바른 것은?
- A2분
- B약 11분
- C40분
정답과 해설 보기
정답: C. 40분
빌드 캐시는 명령마다 사용되며, COPY에서는 복사할 파일의 내용이 이전과 같은지로 판단합니다. 어떤 명령의 캐시를 쓸 수 없게 되면 그보다 뒤의 명령은 모두 다시 실행됩니다. A에서는 첫 COPY . . 시점에서 변화가 발견되므로 매번 2 + 120 + 30 = 152초가 걸립니다. B에서는 package.json과 package-lock.json이 바뀌지 않았으므로 npm ci까지 캐시를 쓸 수 있고, COPY . .와 npm run build의 2 + 30 = 32초로 끝납니다. 차이는 1회당 120초, 20회로 2,400초 = 40분입니다.