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

FROM alpine
ENTRYPOINT ["ping", "-c", "3"]
CMD ["localhost"]

위의 Dockerfile로 만든 이미지 pinger를 docker run pinger example.com으로 시작했다. 컨테이너 안에서 실행되는 명령으로 올바른 것은?

  1. Aping -c 3 localhost
  2. Bping -c 3 example.com
  3. Cexample.com(명령으로 실행하려다 오류가 된다)
정답과 해설 보기

정답: B. ping -c 3 example.com

exec 형식(JSON 배열)으로 쓴 ENTRYPOINT는 컨테이너에서 반드시 실행하는 명령이며, CMD는 그 기본 인수가 됩니다. docker run에서 이미지 이름 뒤에 쓴 인수는 CMD를 대체하고 ENTRYPOINT 뒤에 덧붙여지므로, ping -c 3 example.com이 실행됩니다. 인수 없이 docker run pinger로 하면 CMD의 localhost가 사용되어 ping -c 3 localhost가 됩니다. ENTRYPOINT 자체를 바꾸고 싶을 때는 docker run의 --entrypoint 옵션을 사용합니다.

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

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

  1. 포트 80에서 대기하는 웹 서버의 이미지 nginx로부터 위의 명령으로 컨테이너를 시작했다. 호스트의 IP 주소는 192.0.2.10이고 방화벽 등의 제한은 없다고 하자. 같은 네트워크에 있는 다른 PC의 브라우저에서 이 웹 서버에 접속하는 URL로 올바른 것은?
  2. 위의 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보다 짧아지는 시간으로 올바른 것은?
  3. Docker에서 컨테이너가 쓴 데이터를 남기기 위한 명명된 볼륨과 바인드 마운트의 설명으로 올바른 것은?
  4. 이미지를 registry.example.com/team/web:1.4로 지정하여 가져온다(pull). 이 지정의 각 부분이 뜻하는 바의 조합으로 올바른 것은?
  5. scratch는 파일을 하나도 포함하지 않는 빈 이미지이다. 위의 멀티 스테이지 빌드 Dockerfile로 만든 최종 이미지에 포함되는 것으로 올바른 것은?