컨테이너를 다루다 보면 Docker는 익숙한데, 어느 순간부터 containerd라는 이름이 계속 등장합니다.
특히 Kubernetes 환경에서는 “Docker 대신 containerd 쓰세요” 같은 말을 자주 듣게 되죠.
오늘은 containerd가 정확히 뭘 하는지, Docker와 관계가 뭔지, Kubernetes에서 왜 중요한지를 포스팅용으로 깔끔하게 정리합니다.
✅ 한 줄 정의
🧩 containerd = 컨테이너를 “다운로드하고 실행하고 관리하는” 경량 런타임
즉, 컨테이너를 직접 실행하는 엔진 역할만 집중해서 수행하는 구성 요소입니다.
📌 containerd가 하는 일 (역할 정리)
containerd는 “컨테이너 운영에 필요한 핵심 기능”을 담당합니다.
| 기능 | 설명 |
| 이미지 관리 | 컨테이너 이미지 pull/push, 로컬 저장소 관리 |
| 컨테이너 실행 | 컨테이너 생성/시작/중지/삭제 |
| 스냅샷 관리 | overlayfs 등으로 이미지 레이어(계층) 관리 |
| 네임스페이스 관리 | 프로젝트/서비스별 격리 단위 구성 |
| 이벤트 처리 | 컨테이너 상태 변경 이벤트 제공 |
| OCI 준수 | OCI(Open Container Initiative) 표준 기반 |
👉 핵심 포인트는 이거예요:
✅ “컨테이너 실행과 운영” 에만 집중한 Low-level 엔진
🧱 containerd는 어디서 쓰일까?
실제로 containerd는 다양한 곳에서 기본 런타임으로 쓰입니다.
| 플랫폼/도구 | containerd 사용 여부 |
| Docker (20.10+) | ✅ 내부적으로 containerd 사용 |
| Kubernetes | ✅ CRI 통해 containerd 런타임 사용 가능 |
| k3s / microk8s | ✅ 기본 런타임으로 containerd |
| nerdctl | ✅ containerd 전용 Docker 대체 CLI |
🔄 Docker와 containerd 관계 (제일 많이 헷갈리는 부분)
많은 사람이 “Docker = 컨테이너 런타임”이라고 생각하지만, 실제로는 구조가 이렇게 됩니다.
✅ Docker는 “고수준 도구(High-level)”
- 이미지 빌드 (docker build)
- 네트워크/볼륨
- Dockerfile 기반 개발 경험 제공
- 사용하기 편한 UX 제공
✅ containerd는 “저수준 엔진(Low-level)”
- 실제로 컨테이너를 실행하고 관리하는 역할
🧩 구조로 보면 이렇게 이해하면 끝
Docker CLI
↓
Docker Engine
↓
containerd
↓
runc (실제로 리눅스 컨테이너 프로세스를 실행)
✅ 결론:
Docker는 사용자 편의 도구(껍데기)
containerd는 컨테이너 실행 엔진(본체)
⚙️ containerd 직접 설치 (Ubuntu)
Docker 없이도 containerd만 설치해서 컨테이너를 운영할 수 있습니다.
sudo apt update sudo apt install -y containerd
기본 설정 파일 생성:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
🧪 containerd 실사용 예시 (nerdctl)
containerd를 직접 쓰려면 nerdctl이 거의 필수입니다.
(느낌이 “도커 클론 CLI”라고 보면 됩니다)
예시: nginx 띄우기
nerdctl run -d -p 80:80 nginx
상태 확인
nerdctl ps
이미지 목록 확인
nerdctl images
✅ 핵심:
Docker 없이도 containerd + nerdctl로 컨테이너 운영이 가능하다
✅ containerd 요약 (포스팅용 결론 표)
| 항목 | 설명 |
| 소속 | CNCF 프로젝트 |
| 주요 기능 | 컨테이너 실행/이미지 관리 |
| Docker와 관계 | Docker 내부 엔진으로 사용됨 |
| Kubernetes에서 | containerd를 직접 런타임으로 사용 가능 |
| 장점 | 경량/빠름/표준(OCI) 준수/안정적 |
💡 왜 containerd가 중요해졌을까?
- Docker는 개발 경험(빌드/UX)에 강함
- Kubernetes는 런타임 표준(CRI) 기반으로 더 가볍고 범용적인 엔진을 선호
- 그래서 “K8s = containerd” 흐름이 자연스러워졌습니다.
✅ 특히 운영 관점에서는:
Docker의 많은 기능이 필요 없는 서버 환경에서는
containerd가 더 “딱 필요한 만큼만” 제공해서 효율적입니다.
'IT > CI_CD' 카테고리의 다른 글
| Git LFS란 무엇인가? (0) | 2026.01.14 |
|---|---|
| Git Subtree: 복잡한 설정은 가라, 진짜 '내 코드'처럼 관리하기 (0) | 2026.01.13 |
| Git Submodule: 내 프로젝트 안에 또 다른 프로젝트를 심는 법 (0) | 2026.01.13 |
| 개발자들의 영원한 난제: 멀티 레포 vs 모노 레포 (0) | 2026.01.13 |