도커 아키텍처

도커 컨테이너의 아키텍처

Docker Container Architecture

도커는 도커 데몬, containerd, runC로 구성되어 있다.

1. Docker Daemon (dockerd)

도커 데몬은 도커의 핵십 백그라운드 프로세스로, 도커 컨테이너의 모든 주요 기능을 담당하며 클라이언트와의 상호작용을 처리한다. 이미지를 빌드하거나 컨테이너를 관리하는 역할을 주로 수행한다.

도커 데몬의 주요 구성 요소:

  • Docker CLI:
    도커 명령줄 인터페이스(CLI)로, 사용자나 애플리케이션이 dockerd에게 명령을 내리는 도구. 사용자는 CLI를 통해 컨테이너 생성, 삭제, 네트워크 구성 등의 작업을 할 수 있다.

  • Swarm Kit:
    도커 데몬이 지원하는 클러스터 관리 도구. Swarm은 도커의 네이티브 오케스트레이션 도구로, 여러 대의 도커 호스트를 클러스터로 묶어 관리하고, 이 클러스터에서 컨테이너를 분산 배포한다. 클러스터를 관리하며, 애플리케이션을 여러 노드에 걸쳐 효율적으로 배포할 수 있다.

  • Logs Management:
    모든 도커 컨테이너의 로그를 관리하는 시스템. 도커 데몬은 컨테이너의 로그를 수집하고 관리하여 디버깅 및 모니터링 작업을 지원한다.

  • Storage Management:
    도커 데몬은 볼륨(Volumes)바인드 마운트(Bind Mounts)를 통해 컨테이너의 데이터를 영구적으로 저장할 수 있는 방법을 제공한다. 이를 통해 컨테이너가 중지되더라도 데이터가 유지되며, 컨테이너 간에 데이터를 공유할 수 있다.

  • Libnetwork:
    도커의 네트워킹 라이브러리로, 도커 컨테이너 간의 네트워크 통신을 설정한다. 도커는 기본적으로 브리지 네트워크(bridge network)를 사용하여 컨테이너들이 서로 통신할 수 있도록 한다. 이때, MAC 주소 기반(L2 레벨)으로 통신을 수행하며, 독립된 네트워크 환경을 제공한다.

  • Build Kit:
    도커 이미지 생성에 사용되는 도구. BuildKit은 도커의 빌드 성능을 최적화하고, 캐시 레이어를 효율적으로 사용하여 더 빠른 빌드를 가능하게 한다. 또한, 빌드 작업을 분산 처리할 수 있어 복잡한 빌드 과정을 최적화할 수 있다.

  • DCT (Docker Content Trust):
    도커 컨텐츠의 보안성을 보장하는 기능. DCT를 통해 이미지의 서명 및 검증을 수행할 수 있어, 신뢰할 수 있는 소스에서 생성된 이미지만 사용하도록 설정할 수 있다. 이는 이미지 배포 시 보안을 강화하는 중요한 역할을 한다.

  • Image Management:
    도커 이미지의 생성, 삭제, 배포를 관리한다. 이미지는 도커 컨테이너의 템플릿 역할을 하며, 데몬은 이를 관리하여 필요할 때 빠르게 컨테이너를 시작할 수 있게 한다.

2. Containerd

containerd는 도커의 핵심 컴포넌트 중 하나로, 컨테이너의 런타임 엔진 역할을 한다. 도커 데몬과 함께 작동하며, 컨테이너의 실행, 멈춤, 삭제 등의 생명주기를 관리한다. 이는 고수준의 API를 통해 컨테이너 작업을 처리하며, 다양한 컨테이너 엔진과 통합될 수 있다.

  • CRI-O:
    CRI-O는 쿠버네티스의 컨테이너 런타임 인터페이스(CRI)에 맞춘 경량화된 컨테이너 런타임으로, containerd와 함께 쿠버네티스 환경에서 도커 없이도 컨테이너를 실행할 수 있는 엔진이다. 도커가 아닌 OCI(Open Container Initiative) 표준 컨테이너를 실행할 수 있도록 설계되었다.

3. RunC (Container Runtime)

runC는 도커의 컨테이너를 실제로 실행하는 경량화된 컨테이너 런타임이다. Open Container Initiative(OCI) 표준을 따르며, 리눅스 시스템에서 도커가 제공하는 컨테이너의 격리 환경을 직접적으로 실행하고 관리한다. 도커와 다른 도구들도 이 런타임을 사용하여 컨테이너를 구동할 수 있다.

  • 컨테이너 생성에 관여:
    runC는 도커 컨테이너가 생성되면 이를 실행하는 역할을 하며, 리눅스 네임스페이스와 cgroups를 통해 자원 격리와 제한을 설정한다.

Leave a comment