Skip to content

도커 아키텍처

도커는 client-server architecture를 사용한다.

도커 Client와 Daemon은 UNIX Socket 또는 Network Interface를 기반으로하는 REST API를 사용하여 커뮤니케이션한다. Client에서는 Docker Daemon에 명령어를 보내서, 컨테이너를 빌드, 실행 및 배포하도록 한다.

도커 Client와 Daemon은 같은 시스템 안에서 실행될 수도 있고, remote Docker Daemon에 Client를 연결하여 사용할 수도 있다.

아래 사진을 보며 도커 아키텍처 구조에 대해 더 상세히 알아보자.

image

Docker Daemon

도커 데몬(dockerd)는 Docker API 요청을 받고, image/container/network/volume과 같은 도커 Object를 관리한다 도커 서비스를 관리하는 다른 데몬과 커뮤니케이션할 수 있다.

Docker Client

도커 클라이언트(Docker)는 도커 유저가 도커와 Interact할 수 있는 주요 방법 중의 하나이다. ‘docker run’이라는 커맨드를 입력하게 되면, 클라이언트는 이 커맨드를 dockerd으로 보내고, dockerd에서 이 커맨드를 실행한다. 클라이언트는 Docker API를 사용하며, 하나 이상의 데몬과 커뮤니케이션이 가능하다.

Docker Registries

도커 레지스트리는 도커 이미지(image)를 저장할 수 있는 공간이다. Docker Hub는 누구나 이용가능한 public registry이며, 기본적으로 도커는 Docker Hub에서 이미지를 찾도록 설정되어 있다. 물론, 개인 Registry를 사용할 수도 있다.

Docker Objects

Docker를 사용하면 이미지, 컨테이너, 네트워크, 스토리지 및 기타 개체를 만들고 사용하게 된다. 이러한 것들을 도커 Objects라고 한다.

각 Object의 역할은 다음과 같다.

이미지

이미지는 도커 컨테이너의 정보를 담은 템플릿이다. 특정 구문을 사용한 Dockerfile 을 만들면 도커가 그에 대한 이미지를 만들어주고, 그 이미지의 정보를 읽으면 그에 따른 컨테이너를 생성할 수 있다.

컨테이너

컨테이너는 이미지를 실행한 애플리케이션 인스턴스이며, 다른 컨테이너 및 해당 호스트 시스템과 격리되어있는 하나의 공간이다.

Docker API 또는 CLI를 사용하면 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있다. 그리고 컨테이너를 하나 이상의 네트워크에 연결하거나, 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지를 생성할 수도 있다.

네트워크

Docker 네트워킹은 격리된 모든 컨테이너간의 통신 통로이다. docker 네트워크에는 주로 5가지의 종류가 있다.

Bridge:

  • docker0 네트워크와 같다.
  • 같은 브릿지에 있는 컨테이너끼리는 통신이 가능하게 해주고, 다른 브릿지는 통신할 수 없도록 한다
  • 컨테이너를 생성하면 Bridge가 디폴트로 설정된다.

Host:

  • 호스트의 네트워크 환경을 그대로 사용하는 방식이다.
  • 주로 컨테이너가 한개일 때 유용하다.
  • 호스트의 네트워크를 그대로 사용하기 때문에 포트포워딩이 필요 없다.

none:

  • 네트워크를 사용하지 않는다.
  • --net=none

container:

  • 다른 컨테이너의 네트워크 환경을 공유한다.

Overlay:

  • 분산된 네트워크(호스트가 여러개인 상황)에서 도커를 사용해야 할 떄 사용한다.
  • 각 머신에서 swarm mode가 활성화되어야 한다 (도커가 도커엔진 다수를 관리할 수 있도록 하는 방법)

스토리지

여러 작업 중 컨테이너 내부에서 생성한 정보, 파일은 컨테이너가 종료된 후에 모두 사라진다. 이러한 데이터를 저장하려면 별도의 저장공간이 필요한데, 컨테이너가 동작 중인 상태에서는 접근이 제한되기 때문에 직접 옮기기는 쉽지 않다.

도커는 스토리지에 파일을 저장하여 컨테이너가 종료되더라도 파일을 유지할 수 있도록 한다. 스토리지는 원본 이미지를 수정 하는 대신 변경된 정보를 따로 저장하고, 원본 데이터와 변경된 정보를 조합해서 복원하는 식으로 데이터를 읽는다. 이렇게 하여 원본 이미지를 수정 할 필요 없이 각 컨테이너마다 다른 정보를 저장 할 수 있다.

도커 스토리지의 종류는 여기에서 더 알아보자.