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

같은 베이스 이미지(120 MB) 위에 각각 고유한 레이어를 30 MB씩 겹친 5개의 이미지가 있다. 레이어의 압축이나 메타데이터의 용량은 생각하지 않는다. 서버 1대에 이 5개의 이미지를 모두 가져왔을(pull) 때, 이미지가 사용하는 디스크 용량으로 올바른 것은?

  1. A150 MB
  2. B270 MB
  3. C750 MB
정답과 해설 보기

정답: B. 270 MB

이미지 레이어는 내용으로부터 계산한 다이제스트로 식별되며, 같은 레이어는 서버 1대에 한 번만 저장되어 여러 이미지가 공유합니다. 베이스 이미지 레이어 120 MB는 한 번분뿐이고, 고유 레이어는 5개로 30 MB × 5 = 150 MB이므로 합계는 120 + 150 = 270 MB입니다. 공유하지 않는다고 했을 때의 (120 + 30) × 5 = 750 MB와 비교하여 480 MB 적게 듭니다. 베이스 이미지를 통일하면 가져오는 시간과 디스크 용량을 줄일 수 있습니다.

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

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

  1. 위의 Dockerfile에서 docker build로 이미지를 만들 때 실행되는 명령과, docker run으로 컨테이너를 시작할 때 실행되는 명령의 조합으로 올바른 것은?
  2. 위의 Dockerfile로 만든 이미지 pinger를 docker run pinger example.com으로 시작했다. 컨테이너 안에서 실행되는 명령으로 올바른 것은?
  3. 포트 80에서 대기하는 웹 서버의 이미지 nginx로부터 위의 명령으로 컨테이너를 시작했다. 호스트의 IP 주소는 192.0.2.10이고 방화벽 등의 제한은 없다고 하자. 같은 네트워크에 있는 다른 PC의 브라우저에서 이 웹 서버에 접속하는 URL로 올바른 것은?
  4. 위의 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보다 짧아지는 시간으로 올바른 것은?
  5. Docker에서 컨테이너가 쓴 데이터를 남기기 위한 명명된 볼륨과 바인드 마운트의 설명으로 올바른 것은?