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

FROM python:slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

위의 Dockerfile에서 docker build로 이미지를 만들 때 실행되는 명령과, docker run으로 컨테이너를 시작할 때 실행되는 명령의 조합으로 올바른 것은?

  1. Abuild 때: pip install, run 때: python app.py
  2. Bbuild 때: pip install과 python app.py, run 때: python app.py
  3. Cbuild 때: 없음, run 때: pip install과 python app.py
정답과 해설 보기

정답: A. build 때: pip install, run 때: python app.py

RUN은 이미지를 만들 때 명령을 실행하고, 그 결과(여기서는 설치된 라이브러리)를 새 레이어로 이미지에 저장합니다. CMD는 컨테이너를 시작했을 때 실행할 기본 명령을 이미지의 설정으로 기록할 뿐이며, 빌드할 때는 실행되지 않습니다. 따라서 라이브러리 설치는 한 번의 빌드로 끝나고, 컨테이너를 시작할 때마다 python app.py가 실행됩니다. docker run에서 이미지 이름 뒤에 명령을 쓰면 CMD의 내용은 그 명령으로 바뀝니다.

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

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

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