TIL

Docker - ContainerD 차이

하얀잔디 2026. 3. 7. 21:13

 

유데미 강의보는데 헷갈려서 정리

 

1) 처음에는 그냥 Docker 하나였다

초기에는 컨테이너 = 거의 Docker 였음.

Docker 안에는 사실 여러 기능이 다 들어있었음.

초기

Docker
├ 이미지 빌드
├ 이미지 다운로드
├ 컨테이너 실행
├ 네트워크
├ 스토리지
└ API
 
 

그래서 쿠버네티스도 처음에는
Docker를 직접 사용했음.

 

 

2) 문제 발생

근데 문제가 있었음.

Docker는 너무 큰 프로그램이었음.

쿠버네티스가 원하는 건 사실 딱 하나였음.

 

컨테이너 실행 ( 컨테이너 : 프로그램 + 실행환경을 묶어서 바로 실행되는 패키지)

컨테이너 하나 실행해줘
컨테이너 중지해줘
컨테이너 상태 알려줘
 

근데 Docker 전체를 붙여야 했음.

그래서 Kubernetes 팀이 생각함.

"컨테이너 실행하는 표준 인터페이스 만들자"

 

 

그래서 나온게 CRI

 

CRI = Container Runtime Interface

 쿠버네티스가 컨테이너 실행할 때 사용하는 표준 API

쿠버네티스

CRI

컨테이너 실행 프로그램
 

그래서 쿠버네티스는 이제

  • Docker
  • containerd
  • CRI-O

아무거나 사용 가능

 

Docker 내부를 뜯어보니 containerd가 있었다

재밌는 사실 하나.

Docker 안에는 이미

 

containerd

라는 컨테이너 실행 엔진이 있었음.

구조

Docker
└ containerd
└ runc
 

그래서 Kubernetes가 말함.

Docker 필요 없고
containerd만 쓰자.

그래서 지금 대부분 쿠버네티스는

 

containerd 사용

 

 

OCI는 또 뭐냐

OCI = Open Container Initiative

👉 컨테이너 표준 규격

누가 만들었냐면

👉 Open Container Initiative

쉽게 말하면

컨테이너 형식 표준
컨테이너 실행 방법 표준
 

그래서 어떤 런타임이든

  • Docker
  • containerd
  • CRI-O

OCI 규격만 지키면 호환됨

 

 

결론적으로 -> 원래 Contianerd 는 도커 안에 있는 컨테이너 실행 도우미 느낌인데 이젠 별개로 설치 가능

 

 

 

+

CRI (Container Runtime Interface)

Kubernetes 가 컨테이너 런타임에게 명령하는 표준 규격(API)

 

컨테이너 실행 프로그램에게 명령하는 표준 말투