Docker Container
Docker는 컨테이너 기반의 가상화 플랫폼으로, 애플리케이션을 격리된 공간에서 효율적으로 실행할 수 있도록 해줍니다. 실제로 Docker는 수많은 컨테이너 플랫폼 중 하나일 뿐이지만, ‘컨테이너’라는 개념이 대중화되는 데 가장 큰 역할을 한 대표적인 기술이기도 하며, 오늘날 가장 먼저 떠오르는 플랫폼입니다.
실제로 쿠버네티스의 빌드 및 배포 과정에서는 Docker가 사실상 표준처럼 사용되고 있으며, 컨테이너의 격리 기술에 대한 이해가 선행된다면 쿠버네티스의 구조와 동작 원리를 보다 쉽게 이해할 수 있습니다.

Docker의 구조를 보도록 하겠습니다.
ㅁ Docker Client
사용자가 명령어를 입력하는 인터페이스입니다.
예: docker container run ...
CLI 도구 또는 Docker Compose 등이 여기에 해당합니다
이 명령어는 Docker 데몬(dockerd)에게 API 요청을 보냅니다.
(HTTP/HTTPS over Unix Socket or TCP)
ㅁ Docker Daemon (dockerd)
Docker의 핵심 백그라운드 서비스입니다.
주요 기능으로는
- API 처리 (Docker 명령어 해석)
- 컨테이너/이미지 관리
- 네트워크 설정
- 스토리지 관리
- SwarmKit, BuildKit, Docker Content Trust 등 포함됩니다.
사용자의 명령을 받아서 containerd에게 gRPC로 요청을 보냅니다.
(예: client.NewContainer(...))
ㅁ containerd (High-Level Runtime)
도커 내부에서 컨테이너 실행을 담당하는 컴포넌트입니다. 사실상 도커 없이도 독립적으로 컨테이너 실행이 가능한 런타임입니다.
주요 기능으로는
- 이미지 풀링
- 컨테이너 생성/삭제
- 네트워크 연결
- 볼륨 마운트
dockerd ↔ containerd는 gRPC 기반으로 통신합니다.
ㅁ shim
containerd가 runc를 호출할 때 중간에서 컨테이너의 실행을 분리해주는 역할을 합니다. 각 컨테이너마다 별도의 shim 프로세스가 존재 하며 runc의 생명주기를 관리하면서도 containerd를 차단하지 않도록 도와주며 컨테이너의 표준 출력/입력, 상태 추적 등을 shim이 담당합니다.
ㅁ runc (Low-Level Runtime)
가장 하위 계층의 런타임으로서, 실제로 리눅스 커널의 cgroup, namespace 기능을 이용해 컨테이너를 생성하고 실행합니다.OCI(Open Container Initiative)에서 정의한 표준 사양을 따르기 떄문에 containerd 또는 CRI-O에서도 runc를 사용할 수 있습니다.
위 처럼 도커의 구조가 생각보다 간단하지 않습니다. 쿠버네티스 운영에 있어 더욱더 복잡한 개념들과 인프라들이 공존하기 때문에도커는 머리속에서 그려질 정도로 보는것이 좋습니다.
'쿠버네티스' 카테고리의 다른 글
| [쿠버네티스] 자원에도 울타리가 필요하다: Cgroups와 OOM Killer (0) | 2026.03.11 |
|---|---|
| [쿠버네티스] "도커 네트워크가 어렵나요?" Docker0와 CNI로 풀어보는 컨테이너 통신 원리 (0) | 2025.11.24 |
| [쿠버네티스] 네임스페이스(Namespace)로 만드는 마법: 컨테이너가 서로를 볼 수 없는 이유 (0) | 2025.11.24 |
| [쿠버네티스] "어디서든 돌아가는 컨테이너의 비밀" 표준 규격 OCI가 중요한 이유 (0) | 2025.10.26 |
| [쿠버네티스] 물리 서버에서 클라우드 네이티브까지: 서버 인프라 격변의 중심 '컨테이너' (1) | 2025.07.28 |