지난 글에서 작성한 도커의 특징을 다시 복습하고 가자.

 

도커는 무엇인가?

  • 컨테이너 기반의 가상화 도구
    • 리눅스 컨테이너 기술인 LXC(Linux Containers) 기반
  • 애플리케이션을 컨테이너 단위로 실행하고 배포하는 기술
  • 다양한 운영체제에서 사용할 수 있고, 컨테이너화된 애플리케이션을 손쉽게 빌드, 배포, 관리할 수 있는 다양한 기능을 제공함
  • 위 기능들을 통해 어플리케이션을 빠르게 개발하고, 효율적으로 배포 및 관리할 수 있음.

 

이번 글에서는, 도커의 아키텍쳐에 대해서 알아보자.

도커는 크게 '클라이언트', '도커 호스트', '레지스트리'로 나누어져 있다.

먼저, 도커의 핵심인 도커 호스트를 보자.

Docker Host

도커 호스트에 있는 'Docker daemon'이 도커 호스트의 핵심이다.

Docker daemon을 실행하는것이, 우리가 Cli에서 명령어로 도커를 띄우는 것이다.

도커 데몬은 다음과 같은 순서로 컨테이너를 띄운다.

  1. Cli에서 도커 데몬에 요청을 보낸다.
  2. 도커 데몬에서 이미지를 생성한다.
  3. 그 이미지와 우리가 만든 레이어를 토대로 컨테이너를 띄운다.

점선을 보면, 도커 데몬이 레지스트리에서 이미지를 떠와서 우리의 정보와 함께 이미지를 생성하고, 또 이 이미지를 레지스트리에 등록하기도 한다는 것을 볼 수 있다.

 

그런데, 3번의 '레이어'라는것은 무엇일까?

우리가 컨테이너의 변경점이 있다고 해서 컨테이너를 처음부터 다시 설치하는 일은 굉장히 비효율적일 것이다.

그래서 컨테이너는 R/O인 image layer를 겹겹이 추가하되, 위에 read-write가 가능한 컨테이너 레이어를 둠으로써 현재 실행중인 image에 변경점이 가지 않도록 하였다.

Docker file이라는 베이스 파일의 한 줄, 한 줄이 레이어로, 명령어를 추가해 나갈 때마다 레이어가 한 겹씩 쌓여간다고 생각하면 이해가 쉽다.

위에는 도커 컨테이너가 LXC 기반이라고 했지만, 현재 도커는 layer 아키텍처를 도입함으로써 LXC와는 독립적인 방식을 구현하고 있다. 

 

이제 본격적으로 도커 호스트의 구성요소를 알아보자.

Docker daemon ( = dockerd)

  • 도커 엔진의 핵심 구성 요소
  • 도커 호스트에서 컨테이너를 관리하고 실행하는 역할
  • 컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행한다.
  • 컨테이너에서 이미지를 관리한다.

 

Docker Client (=cli)

  • Docker와 상호 작용
  • 도커 명령어를 사용하면 Docker daemon으로 보내어 실행

 

Docker Object

다음은, 도커 오브젝트의 구성 요소에 대해 알아보자.

Docker Image

  • 도커 컨테이너를 만들기 위한 읽기 전용 템플릿
  • 도커 파일을 가지고 만들 수 있다.

Docker Container

  • 도커 이미지의 실행 가능한 인스턴스
  • 애플리케이션을 실행하기 위한 모든 파일과 설정 정보를 포함하는 패키지

Docker Registries

  • 도커 이미지(Docker Image)를 관리하고 저장하는 곳
    • Docker hub : 디폴트 레지스트리로, 누구나 접근 가능한 공개형 저장소
  • Docker hub 이외에도 AWS가 지원해주는 이미지나 private한 이미지 허브등이 있다.

 

App store과 Docker를 비교한다면?

App store

  • 우리가 어플리케이션을 실행할 때 App store에 가서
  • 프로그램을 다운받아 설치하고
  • 그 인스턴스인 프로세스를 실행한다

Docker

  • 우리가 어떤 어플리케이션을 실행할 때 Docker hub에 가서
  • 이미지를 pull하고
  • 그 인스턴스인 컨테이너를 run한다

비교해보면 docker pull, docker run이 어떤 의미를 내포하는지 잘 알수 있다.

한 프로그램으로 여러 프로세스를 실행할 수 있듯, 한 이미지로 여러 컨테이너를 띄울수도 있다.

 

다음 글에서는, Docker를 실제로 구동해보자.

+ Recent posts