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

$ docker run -d -p 8080:80 nginx

포트 80에서 대기하는 웹 서버의 이미지 nginx로부터 위의 명령으로 컨테이너를 시작했다. 호스트의 IP 주소는 192.0.2.10이고 방화벽 등의 제한은 없다고 하자. 같은 네트워크에 있는 다른 PC의 브라우저에서 이 웹 서버에 접속하는 URL로 올바른 것은?

  1. Ahttp://192.0.2.10:80/
  2. Bhttp://(컨테이너의 IP 주소):8080/
  3. Chttp://192.0.2.10:8080/
정답과 해설 보기

정답: C. http://192.0.2.10:8080/

-p 호스트의 포트:컨테이너의 포트 형식으로 쓰므로, -p 8080:80은 호스트의 포트 8080에 도착한 통신을 컨테이너의 포트 80으로 전달하라는 지정입니다. 다른 PC에서는 호스트 IP 주소의 포트 8080에 접속합니다. 컨테이너의 IP 주소는 일반적으로 호스트 안의 가상 네트워크의 것이어서 외부 PC에서는 직접 도달하지 않습니다. Dockerfile의 EXPOSE 80은 컨테이너가 사용하는 포트를 나타내는 기록이며, 그것만으로는 호스트의 포트가 공개되지 않으므로 -p 지정이 필요합니다.

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

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

  1. 위의 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보다 짧아지는 시간으로 올바른 것은?
  2. Docker에서 컨테이너가 쓴 데이터를 남기기 위한 명명된 볼륨과 바인드 마운트의 설명으로 올바른 것은?
  3. 이미지를 registry.example.com/team/web:1.4로 지정하여 가져온다(pull). 이 지정의 각 부분이 뜻하는 바의 조합으로 올바른 것은?
  4. scratch는 파일을 하나도 포함하지 않는 빈 이미지이다. 위의 멀티 스테이지 빌드 Dockerfile로 만든 최종 이미지에 포함되는 것으로 올바른 것은?
  5. Kubernetes에서 배포하고 관리하는 최소 단위로, 하나 이상의 컨테이너를 묶어 같은 IP 주소와 볼륨을 공유하게 하는 것은?