클라우드와 컨테이너의 기초

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보다 짧아지는 시간으로 올바른 것은?

  1. A2분
  2. B약 11분
  3. 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분입니다.

이 분야 연습하기 분야로 돌아가기

클라우드와 컨테이너의 기초의 다른 문제

  1. Docker에서 컨테이너가 쓴 데이터를 남기기 위한 명명된 볼륨과 바인드 마운트의 설명으로 올바른 것은?
  2. 이미지를 registry.example.com/team/web:1.4로 지정하여 가져온다(pull). 이 지정의 각 부분이 뜻하는 바의 조합으로 올바른 것은?
  3. scratch는 파일을 하나도 포함하지 않는 빈 이미지이다. 위의 멀티 스테이지 빌드 Dockerfile로 만든 최종 이미지에 포함되는 것으로 올바른 것은?
  4. Kubernetes에서 배포하고 관리하는 최소 단위로, 하나 이상의 컨테이너를 묶어 같은 IP 주소와 볼륨을 공유하게 하는 것은?
  5. Kubernetes에서 replicas: 3을 지정한 Deployment의 Pod가 3개 동작하고 있다. 이 중 하나의 Pod를 kubectl delete pod로 삭제했을 때 일어나는 일로 올바른 것은?