Concept

ContainerD

image.png
  • Containerd는 Docker 사에서 moby project 와 함께 발표하여 CNCF 에 기증한 오픈소스입니다.

  • ContainerD 2022년 4월 Docker engine이 쿠버네티스에서 사용중단을 발표한 후, 높은 점유율을 이루고 있습니다.


  • 간단하게 기존에 사용하던 Docker engine을 사용하지 않고 ContainerD를 사용 하게된 이유를 정리하자면
    1. 쿠버네티스는 여러 컨테이너 런타임과 통신할 수 있도록 하는 CRI라는 표준 인터페이스를 설계함.

    2. Docker engine은 CRI 인터페이스가 생기기전 존재한 기술로 CRI 인터페이스와 맞지 않았음.

    3. 이를 해결하기 위해 dockershim이라는 어댑터 컴포넌트를 개발하였음.

    4. 이 쉼의 존재는 kubelet 자체에 많은 불필요한 복잡성을 도입했고, 일부 통합은 이 쉼 때문에 Docker에 대해 일관성 없게 구현되었으며, 이로 인해 유지 관리 부담이 증가하게 됨.

image.png
  1. 이처럼 벤더 특정 코드(특정 제품인 Docker에 종속적인 코드)를 유지 관리하는 것은 쿠버네티스의 오픈 소스 철학에 부합하지 않았고, 2022년 4월 v1.24에서 완전한 제거를 발표하였음.




image.png
  • 그렇다고, ContainerD가 Docker와 완전히 다른 것이 아닌 게, containerD는 도커를 컨테이너 런타임으로 사용할 때 내부적으로 사용되는 컨테이너 런타임 기술로, 이젠 이러한 기술을 도커에서 빼서 containerd만 따로 사용하는 것입니다.

  • 즉, 현재는 Docker에서 컨테이너 런타임을 분리하여 ContainerD를 사용하고, 여전히 관련 이미지 개발 등은 Docker을 사용하는 것입니다.

  • Docker Engine, ContainerD에 간단 비교는 아래를 참고해주세요.



Docker Engine vs ContainerD

특성 Docker Engine ContainerD
설명 Docker의 전체 컨테이너 관리 플랫폼 경량화된 컨테이너 런타임
주요 기능 이미지 빌드, 배포, 컨테이너 실행 컨테이너 실행, 이미지 관리
API Docker API 제공 CRI (Container Runtime Interface) 지원
설치 및 설정 복잡한 설치 및 설정 비교적 간단한 설치 및 설정
부하 상대적으로 높은 리소스 소모 더 경량화되어 리소스 효율성 높음
의존성 여러 추가 도구 (예: Docker Compose) 필요 Kubernetes에서 직접 사용 가능
주요 사용 사례 개발 및 테스트 환경 프로덕션 환경, 특히 Kubernetes에서 사용



References

RSS Feed