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

어떤 이미지로 시작한 컨테이너 안에서, 이미지에 포함된 설정 파일 /etc/app.conf를 수정했다. Docker의 일반적인 스토리지 구조(overlay2 등)에서 일어나는 일로 올바른 것은?

  1. A파일이 컨테이너의 쓰기 가능한 레이어로 복사된 후 수정되며, 이미지와 다른 컨테이너에는 영향을 주지 않는다
  2. B이미지 레이어에 있는 파일이 직접 수정되어, 같은 이미지로 시작한 다른 컨테이너에서도 변경 후의 내용이 보인다
  3. C이미지 레이어는 읽기 전용이므로 이미지에 포함된 파일은 수정할 수 없으며, 쓰기는 오류가 된다
정답과 해설 보기

정답: A. 파일이 컨테이너의 쓰기 가능한 레이어로 복사된 후 수정되며, 이미지와 다른 컨테이너에는 영향을 주지 않는다

컨테이너의 파일 시스템은 읽기 전용인 이미지 레이어 위에 컨테이너별 쓰기 가능한 레이어를 겹쳐 하나로 보이게 한 것입니다. 아래 레이어에 있는 파일을 처음 수정할 때 그 파일이 쓰기 가능한 레이어로 복사되고, 이후로는 복사본이 사용됩니다(카피 온 라이트). 그래서 이미지 레이어는 바뀌지 않으며, 같은 이미지를 공유하는 다른 컨테이너에도 영향을 주지 않습니다. 큰 파일은 첫 복사에 시간이 걸리므로, 데이터베이스의 데이터처럼 자주 쓰는 것은 볼륨에 둡니다.

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

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

  1. 500 MB의 아카이브 data.tar.gz를 풀기 위해 위의 Dockerfile로 이미지를 만들었다. 압축을 푼 뒤 같은 RUN 안에서 아카이브를 삭제했는데도, 이미지 크기는 아카이브만큼 큰 채로였다. 이유와 대책의 조합으로 가장 적절한 것은?
  2. 같은 베이스 이미지(120 MB) 위에 각각 고유한 레이어를 30 MB씩 겹친 5개의 이미지가 있다. 레이어의 압축이나 메타데이터의 용량은 생각하지 않는다. 서버 1대에 이 5개의 이미지를 모두 가져왔을(pull) 때, 이미지가 사용하는 디스크 용량으로 올바른 것은?
  3. 위의 Dockerfile에서 docker build로 이미지를 만들 때 실행되는 명령과, docker run으로 컨테이너를 시작할 때 실행되는 명령의 조합으로 올바른 것은?
  4. 위의 Dockerfile로 만든 이미지 pinger를 docker run pinger example.com으로 시작했다. 컨테이너 안에서 실행되는 명령으로 올바른 것은?
  5. 포트 80에서 대기하는 웹 서버의 이미지 nginx로부터 위의 명령으로 컨테이너를 시작했다. 호스트의 IP 주소는 192.0.2.10이고 방화벽 등의 제한은 없다고 하자. 같은 네트워크에 있는 다른 PC의 브라우저에서 이 웹 서버에 접속하는 URL로 올바른 것은?