도커 아키텍처
도커 컨테이너의 아키텍처
도커는 도커 데몬, 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