DevOps/Docker

[Docker] 기초 시리즈 (3) 이미지와 컨테이너 관계, 도커 아키텍처

유자맛바나나 2021. 12. 30. 05:21

[도커 기초 시리즈 포스팅]

[Docker] 기초 시리즈 (1) 도커의 개념과 사용이유

[Docker] 기초 시리즈 (2) Ubuntu에 도커 엔진 설치

[Docker] 기초 시리즈 (3) 이미지와 컨테이너 관계, 도커 아키텍처 (Now)

[Docker] 기초 시리즈 (4) 도커 이미지의 구조

[Docker] 기초 시리즈 (5) 도커 이미지 다루기 - Docker Hub(Registry)

[Docker] 기초 시리즈 (6) 도커 이미지 다루기 - 이미지 직접 생성

[Docker] 기초 시리즈 (7) 자주 사용하는 Dockerfile 명령어

[Docker] 기초 시리즈 (8) 자주 사용하는 도커 명령어 모음

[Docker] 기초 시리즈 (9) 도커 컨테이너 - 개념, 기본 사용법

[Docker] 기초 시리즈 (10) 도커 컨테이너 - Volume 관리

 

 

❑ 도커 이미지와 컨테이너의 관계

1) 도커 사용의 최종 목적은 컨테이너 생성이다

  • 도커의 다양한 명령어, 옵션을 사용해서 최종적으로 달성하고자 하는 것은 하나의 프로세스가 동작하는 '컨테이너'를 생성하는 것이다.

 

2) 컨테이너는 이미지를 이용해 생성한다

Image와 Container는 객체지향의 Class-Instance와 같다

  • 컨테이너는 이미지를 이용해 생성할 수 있다. 즉, 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있으므로 1:N 관계다.
  • 이미지와 컨테이너는 객체지향에서 클래스와 인스턴스 관계와 같다. 이미지는 컨테이너를 생성할 수 있는 명세서 또는 레시피로 이해할 수 있고, 컨테이너는 그 레시피를 이용해 생성한 객체인 것이다.

 

❑ 도커 아키텍처

도커 아키텍처 그림

도커 사용의 최종 목적은 '컨테이너 생성'임을 상기하며 아키텍처의 그림에서 Clinet부터 화살표의 흐름대로 살펴본다

 

1) Client

  • 도커 클라이언트는 사용자와 도커가 소통할 수 있는 기본 창구다. 즉 Windows의 명령 프롬프트, Mac의 터미널과 같은 것이다. 
  • 사용자는 도커 클라이언트를 통해 docker run과 같은 도커 명령어를 전달하고, 전달 받은 도커 데몬(Dockerd)은 이를 수행한 뒤 도커 클라이언트에게 반환한다.
  • 도커 클라이언트와 도커 데몬은 /var/run/docker.sock(소켓)에 위치한 유닉스 소켓을 통해 통신하며, API를 사용하여 명령어를 전달한다

2) DOCKER_HOST

  • 도커가 설치된 OS를 도커 호스트라고 한다.
  • 도커 호스트 내에는 도커 엔진이 설치되어 컨테이너의 Life Cycle, 이미지 관리, 데이터 저장을 위한 볼륨 관리, 네트워크 관리 등을 한다.

 

3) Docker daemon

  • 도커 엔진의 한 모듈로서 사용자가 입력하는 도커 명령어를 전달 받아 컨테이너, 이미지 등 도커 객체를 생성하고 관리한다.
  • 도커 데몬은 명령어에 해당하는 작업을 수행한 뒤 결과를 도커 클라이언트에 반환한다

 

4-1) Images

  • 컨테이너를 생성하기 위해 도커 호스트에 저장된 이미지들의 집합이다.
  • 이미지에는 프로세스를 실행시키는데 필요한 어플리케이션 코드, 설정 파일, 데이터 등이 담겨있다.
  • 사용자는 도커 클라이언트를 통해 이미지를 사용해 컨테이너를 생성하도록 지시할 수 있다. 

 

4-2) Registry

  • 컨테이너를 생성하기 위한 외부 이미지 저장소다.
  • Public Registry로 가장 대표적인 Docker Hub가 있고 보안상 이유로 Private Registry를 운영하기도 한다. 대표적인 Private Registry는 AWS ECR, docker registry(오픈 소스)가 있다.

 

5) Container

  • 이미지를 이용해 생성한 컨테이너다
  • 사용자는 도커 클라이언트를 통해 이미지를 사용해 컨테이너를 생성하도록 지시할 수 있다.