Devops

Docker의 내부 구조

baecode 2025. 10. 22. 14:35
반응형

Docker는 단일 프로그램이 아닌, 여러 구성 요소가 컨테이너를 생성하고 실행하기 위해 협력하는 구조입니다.

 

 

흐름

[사용자] 
   │
   ▼
[docker CLI]  ← 우리가 터미널에서 쓰는 docker 명령어
   │
   ▼
[dockerd] (Docker 데몬)  
   │
   ▼
[containerd] (컨테이너 관리)
   │
   ▼
[runC] (실제 컨테이너 실행, Linux 커널 기능 호출)
   │
   ▼
[리눅스 커널: namespace, cgroup, overlayfs ...]

 

 

dockerd

dockerd는 도커의 메인엔진이며 데몬 프로세스입니다.

 

dockerd의 기능

  •  이미지관리 (pull/push/build)
  •  컨테이너 수명관리(start/stop/restart)
  •  네트워크 및 볼륨 설정관리[libnetwork]
  •  로그 관리
  •  swarm kit
  • docker cli api
    • 우리가 docker CLI 에 명령어를 입력하면 dockerd에 API요청이 전달됩니다

컨테이너 실행을 하게되면 내부적으로 containerd에게 실행을 위임하게 됩니다

 

containerd

dockerd 아래에서 실제 컨테이너를 관리하는 런타임 엔진이며 kubernetes 도 containerd 를 직접 사용합니다

 

containerd는 실제 실행을 runC에게 맡기게 됩니다.

 

runC

가장 하위 계층에서 실제 컨테이너를 실행하는 도구입니다.

 

Linux 커널의 namespace, cgroups 기능을 직접 사용하여 프로세스를 격리된 공간 안에 실행시킵니다.

 

 

 

libnetwork

 

docker가 자체적으로 사용하는 네트워크 관리 라이브러리

 

  • 컨테이너 간, 또는 호스트와 컨테이너 간 통신 네트워크 구성 역할
  • docker에서 bridge, host, overlay, macvlan 같은 네트워크 모드 설정 내부관리
  • 네임스페이스(netns) 와 veth(가상 네트워크 인터페이스)를 사용해 컨테이너별 네트워크를 격리
반응형