1. 개요

<Docker 가상 환경 구축 입문> <Chapter 3. 컨테이너 기동 방법을 이해하자> 읽고 정리한 내용으로,

이번 문서의 주된 내용은 Docker 컨테이너 실행의 흐름과 Docker Image, Docker Hub의 소개입니다.

 

2. Docker Hub

  • Docker사가 제공하는 서비스로, 이미지를 보관하고 공개할 수 있음
  • 이미지는 오픈 소스 커뮤니티가 제공하는 official한 이미지와 개인이 작성하여 공개한 것이 있음
  • 이와 같이 이미지를 보존해두는 서비스를 “레지스트리 서비스”라고 하며, 이러한 보관장소를 “레지스트리”라고 함
  • Docker Hub에 공개된 이미지에는 태그에 따른 정보가 제공되어 있어, 이를 기반으로 관리가 됨
  • Docker Hub 이외에도 quay.io라는 레지스트리 서비스를 이용하거나, 자신이 직접 관리하는 Docker Registry 등 사용 가능

 

3. Docker Image

  • 컨테이너 실행에 필요한 파일이나 메타 데이터 등을 종합한 것
  • AUFS(Union File System) 등 특수한 파일시스템이 사용됨
  • 이미지 상의 파일이나 메타 데이터는 레이어(계층) 구조이며, read only로 구성됨
  • 각각의 레이어는 DockerFile이라는 도커 이미지 작성을 위한 설정 파일에 의해 생성
  • 컨테이너는 디폴트 설정 상, 외부와 통신이 불가하므로 필요에 따라 포트 포워딩 설정을 통해 외부에서 컨테이너로 접속이 가능하게 해야 함
  • 컨테이너 기동 시 실행하는 커맨드나 포트 포워딩 등 설정이 필요하며, 이러한 정보를 메타 데이터로서 담아두는 것

 

- Union File System의 장점

  • 이미지 간 공통 레이어에 대해 두 번 다운로드 하지 않고, 공통되는 레이어를 재이용할 수 있음
  • 갱신된 이미지를 다운로드할 경우, 변경이 있는 부분만 다운로드할 수 있음
  • 이미지 업데이트에 따른 이상이 발생한 경우 과거 이미지 버전으로 복구할 수 있음

 

4. Docker Image 관리

  • 다운로드한 도커 이미지 목록 표시
$ docker images

 

  • 도커 이미지 삭제
$ docker rmi hello-world:latest

 

  • 컨테이너를 실행하지 않고 이미지 다운로드만 실행
$ docker pull hello-world:latest

 

  • 이미지 상세 내용 표시
$ docker inspect hello-world:latest

 

 

5. Docker 컨테이너 실행 흐름

  • docker run hello-world 커맨드 실행 시 동작

   ① Docker Client를 사용하여 커맨드 실행

   ② Docker Daemon이 docker 커맨드의 명령을 받아 hello-world 이미지가 현재 가상머신 상에 존재하는 지 조사

   ③ 다운로드 되어있지 않다면 Docker Hub에 해당 이미지 요청

   ④ 요청을 받은 Docker Hub 서버가 hello-world 이미지를 검색하여 이미지 데이터를 Docker Daemon에게 송신

   ⑤ Docker Daemon은 Docker Hub로부터 다운로드한 hello-world 이미지를 사용하여 컨테이너 생성

   ⑥ 컨테이너 생성 후 사전에 이미지에 설정된 커맨드를 컨테이너 내부에서 실행하여 그 결과가 Docker Client에 보내짐

 

  • docker run 커맨드는 다음의 커맨드를 순서대로 실행하는 것과 같은 의미

   $ docker pull : 이미지 취득
   $ docker create : 컨테이너 생성
   $ docker start : 컨테이너 기동

 

  • Docker 파일에 CMD 명령을 기술하면 작성한 이미지로 컨테이너를 기동할 때 디폴트로 실행할 커맨드가 설정됨