Docker란?

컨테이너 이미지의 작성(빌드), 레지스트리와의 이미지 주고받기, 컨테이너의 시작과 관리를 수행하기 위한 대표적인 소프트웨어 일체. Dockerfile에 쓴 명령으로 이미지를 만들고, docker run으로 컨테이너를 시작한다. -p에 의한 포트 공개, 볼륨이나 바인드 마운트에 의한 데이터 보존, 네트워크 설정 등을 수행할 수 있다. 이미지와 컨테이너의 형식은 OCI(Open Container Initiative) 사양으로 표준화되어 있어, Docker 이외의 도구로도 같은 이미지를 다룰 수 있다.

일본어 명칭: Docker

Docker은(는) 클라우드와 컨테이너의 기초 등 1개 분야의 연습 문제 6개에 나와요.

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

도전해 보기: Docker 관련 문제

Linux 호스트에서 Docker를 사용하여, 호스트와는 다른 배포판을 바탕으로 한 이미지로 컨테이너를 시작하고, 그 안에서 uname -r(커널의 릴리스를 표시하는 명령)과 cat /etc/os-release(배포판 정보를 표시하는 명령)를 실행했다. 결과의 설명으로 올바른 것은?

  1. Auname -r도 /etc/os-release도 호스트의 커널과 배포판의 정보를 표시한다
  2. Buname -r도 /etc/os-release도 이미지의 바탕이 된 배포판과 그 커널의 정보를 표시한다
  3. Cuname -r은 호스트의 커널을, /etc/os-release는 이미지의 배포판을 표시한다
정답과 해설 보기

정답: C. uname -r은 호스트의 커널을, /etc/os-release는 이미지의 배포판을 표시한다

컨테이너는 호스트의 커널을 공유하므로, 커널에 문의하는 uname -r은 컨테이너 안에서도 호스트 커널의 릴리스를 표시합니다. 한편 /etc/os-release는 파일이므로 컨테이너에서 보이는 파일 시스템, 즉 이미지에 포함된 것이 읽히고, 이미지의 배포판 이름이 표시됩니다. 이미지에는 커널이 포함되지 않으며, 명령이나 라이브러리 등 사용자 공간의 파일만 들어 있습니다. 그래서 호스트의 커널에 없는 기능을 전제로 한 프로그램은 컨테이너 안에서도 동작하지 않습니다.

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

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

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

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

해설 속 Docker

Docker이(가) 나오는 문제 (6)

  1. Linux 호스트에서 Docker를 사용하여, 호스트와는 다른 배포판을 바탕으로 한 이미지로 컨테이너를 시작하고, 그 안에서 uname -r(커널의 릴리스를 표시하는 명령)과 cat /etc/os-release(배포판 정보를 표시하는 명령)를 실행했다. 결과의 설명으로 올바른 것은?
  2. 어떤 이미지로 시작한 컨테이너 안에서, 이미지에 포함된 설정 파일 /etc/app.conf를 수정했다. Docker의 일반적인 스토리지 구조(overlay2 등)에서 일어나는 일로 올바른 것은?
  3. 위의 Dockerfile에서 docker build로 이미지를 만들 때 실행되는 명령과, docker run으로 컨테이너를 시작할 때 실행되는 명령의 조합으로 올바른 것은?
  4. 위의 Dockerfile로 만든 이미지 pinger를 docker run pinger example.com으로 시작했다. 컨테이너 안에서 실행되는 명령으로 올바른 것은?
  5. Docker에서 컨테이너가 쓴 데이터를 남기기 위한 명명된 볼륨과 바인드 마운트의 설명으로 올바른 것은?
  6. 이미지를 registry.example.com/team/web:1.4로 지정하여 가져온다(pull). 이 지정의 각 부분이 뜻하는 바의 조합으로 올바른 것은?

관련 용어

컨테이너(Container) 카피 온 라이트(Copy-on-Write) JSON(JavaScript Object Notation) 인수(Argument) 가용 영역(Availability Zone) 공동 책임 모델(Shared Responsibility Model) 관측 가능성(Observability) 블루-그린 배포(Blue-Green Deployment) 서버리스(Serverless) 오브젝트 스토리지(Object Storage)

용어집으로 돌아가기