Docker VS Containerd

2024. 12. 11. 22:35쿠버네티스

728x90
반응형

https://dev-chicken.tistory.com/16

 

Docker vs Containerd / Container runtime, 쿠버네티스, 도커, 차이점, 장단점

Container Runtime 때문에 문제가 생겼던 적이 있었다... Containerd와 Docker를 혼용하다가 생긴 문제였다. 다들 알다시피 Kubernetes version 1.24부터 Docker를 사용하지 못하게 됐다. 더보기 Dockershim Removed from ku

dev-chicken.tistory.com

runc의 특징

  • OCI 표준 준수: runc는 Open Container Initiative(OCI) Runtime Specification을 따르는 컨테이너 런타임입니다. 이는 컨테이너를 실행하기 위한 표준화된 사양을 기반으로 작동합니다.
  • 저수준 도구: runc는 컨테이너를 직접 실행하고 관리하는 데 사용되는 저수준 런타임으로, 주로 Containerd Docker와 같은 상위 레벨 도구에서 호출됩니다.
  • 독립 실행 가능: runc는 독립적으로 실행될 수 있지만, 일반적으로 개발자가 직접 사용하는 경우는 드뭅니다. 대신, 상위 레벨 도구들이 이를 호출하여 컨테이너를 실제로 생성하고 실행합니다.

Containerd와 Docker와의 비교

특징runcContainerdDocker
역할 저수준 컨테이너 런타임 중간 수준 컨테이너 런타임 및 관리 도구 고수준 도구로 빌드, 네트워킹 등 포함
OCI 표준 준수 완전 준수 완전 준수 부분적으로 준수
사용 목적 컨테이너 실행 Kubernetes 및 기타 툴과의 통합 개발자 친화적 CLI 및 전체 생태계 제공
사용 사례 Containerd나 Docker에 의해 호출됨 Kubernetes와 직접 통합 가능 독립적으로 사용 가능

Docker와의 관계

  • Docker는 초기 컨테이너 생태계를 주도한 도구로, 사용자 친화적인 CLI 및 API를 제공합니다.
  • Docker 내부에서 runc와 같은 저수준 런타임을 호출하여 실제 컨테이너를 실행합니다.
  • 그러나 Kubernetes가 CRI(Container Runtime Interface)를 도입하면서, Docker 대신 Containerd와 같은 CRI 호환 런타임을 더 선호하게 되었습니다.

Containerd와의 관계

  • Containerd는 runc를 기반으로 작동하며, 이를 통해 Kubernetes나 기타 시스템에서 컨테이너를 관리합니다.
  • Containerd는 ctr 명령어와 같은 기본 CLI를 제공하지만, 이는 디버깅 목적으로 제한적으로 사용됩니다. 대신 nerdctl과 같은 Docker 유사 CLI가 일반적으로 사용됩니다.

Docker와 Containerd의 관계

Docker는 컨테이너 기술의 초기부터 널리 사용된 도구로, 컨테이너 생성 및 관리를 간단하게 만들어 대중화되었습니다. Docker는 여러 구성 요소로 이루어져 있으며, 그 중 하나가 Containerd입니다. Containerd는 Docker의 컨테이너 런타임으로 시작했지만, 현재는 독립적인 프로젝트로 발전하여 Kubernetes와 같은 오케스트레이션 도구와 직접 통합될 수 있습니다.

주요 차이점

  • Docker: 이미지 빌드, 컨테이너 실행, 네트워킹 및 볼륨 관리 등 다양한 기능을 포함한 종합적인 도구.
  • Containerd: 경량화된 컨테이너 런타임으로, Kubernetes와 같은 오케스트레이션 도구와 직접 통합 가능.

Kubernetes는 초기에는 Docker만 지원했으나, 이후 **Container Runtime Interface (CRI)**를 도입해 다양한 컨테이너 런타임을 지원하게 되었습니다. 그러나 Docker는 CRI 표준을 따르지 않아 Kubernetes에서 이를 지원하기 위해 Dockershim이라는 임시 솔루션을 사용했습니다. Kubernetes 1.24 버전부터 Dockershim 지원이 중단되면서 Docker는 Kubernetes에서 공식적으로 제거되었습니다.

CLI 도구들

Containerd와 관련된 주요 CLI 도구는 다음과 같습니다:

ctr

  • Containerd에 포함된 기본 CLI 도구.
  • 주요 용도: 디버깅.
  • 기능 제한적이며 사용자 친화적이지 않음.
  • 프로덕션 환경에서 사용하기 적합하지 않음.

nerdctl

  • Containerd 커뮤니티에서 제공하는 Docker 유사 CLI 도구.
  • 주요 용도: 일반적인 컨테이너 생성 및 관리.
  • Docker CLI와 유사한 명령어를 사용하며, 추가 기능 제공(예: 암호화된 이미지 작업, P2P 이미지 배포 등).
  • Docker 대신 사용할 수 있는 대안.

crictl

  • Kubernetes 커뮤니티에서 제공하는 CRI 호환 런타임용 CLI 도구.
  • 주요 용도: 디버깅 및 CRI 런타임과의 상호작용.
  • Kubernetes의 kubelet과 연동되어 작동하며, 포드(pod)와 관련된 작업 수행 가능.
  • 일반적인 컨테이너 생성보다는 디버깅에 초점.

요약

도구주요 용도개발 커뮤니티대상 런타임특징

 

ctr 디버깅 Containerd Containerd 제한적 기능, 디버깅 전용.
nerdctl 일반적 사용 Containerd Containerd Docker 유사 CLI, 추가 기능 제공.
crictl 디버깅 및 CRI 상호작용 Kubernetes 모든 CRI 호환 런타임 포드 작업 가능, kubelet과 연동.

Docker는 여전히 이미지 빌드 및 관리에서 중요한 역할을 하지만, Kubernetes 환경에서는 Containerd 또는 다른 CRI 호환 런타임과 nerdctl 또는 crictl 같은 도구를 사용하는 것이 더 적합합니다.

  1. ctr
    • Containerd에 포함된 기본 CLI로 디버깅 용도로 사용됩니다.
    • 사용자 친화적이지 않으며 제한된 기능만 제공합니다.
  2. nerdctl
    • Containerd용 Docker 유사 CLI로, 일반적인 컨테이너 관리 작업에 적합합니다.
    • 최신 Containerd 기능(예: 암호화된 이미지, P2P 이미지 배포 등)을 지원합니다.
  3. crictl
    • Kubernetes 커뮤니티에서 개발한 CLI로 CRI 호환 런타임과 상호작용합니다.
    • 디버깅 및 런타임 상태 점검에 주로 사용되며 컨테이너 생성에는 적합하지 않습니다.

Docker와 Containerd의 개요 및 역사

  • Docker는 2013년에 컨테이너 기술을 대중화하며 시작된 도구로, 이미지 빌드, 컨테이너 실행, 네트워킹 및 스토리지 관리 등 다양한 기능을 포함한 종합적인 플랫폼입니다.
  • Containerd는 Docker의 내부 컨테이너 런타임으로 시작되었으나, 2016년에 독립 프로젝트로 분리되었습니다. Kubernetes, AWS Fargate, Rancher와 같은 시스템에서 사용 가능하며, 경량화된 컨테이너 런타임으로 설계되었습니다
  • 맨 처음에는 k8s가 컨테이너 런타임을 도커만 사용함
  • rkt같은 다른 컨테이너 런타임도 추가하고자 함 → 이러려면 필요한게 CRI였음
  • cri = container runtime interface
    • cri 도입으로 oci 표준을 준수하는 다른 컨테이너 런타임을 지원할 수 있게 됨
  • oci = open container initiative
    • 표준을 만들기 위해 구성됨
    • 이미지 스펙 : 이미지 빌드 방식에 대한 기준을 정의
  • 도커는 cri를 지원하려고 만들어진게 아니라서(cri 이전부터 존재함) k8s는 도커를 계속 지원하기 위해 dockershim을 도입했음
    • dockershim : cri 밖에서 docker를 지원하기 위한 임시 방편
  • 그러나 도커는 여러 구성요소로 이루어져 있어서 k8s와 충돌, 불편함이 발생
  • 결국 dockershim 지원을 중단하기로 결정 (v1.23 까지만) → 도커는 더이상 k8s 런타임이 아니게 됨
  • 대신 도커에서 사용하던 containerd라는 cri는 여전히 지원되며, cri-o와 함께 가장 많이 사용되는 런타임 중 하나가 됨

https://velog.io/@zuckerfrei/Docker-vs-ContainerD

 

Docker vs ContainerD

역사 맨 처음에는 k8s가 컨테이너 런타임을 도커만 사용함 rkt같은 다른 컨테이너 런타임도 추가하고자 함 → 이러려면 필요한게 CRI였음 cri = container runtime interface cri 도입으로 oci 표준을 준수하

velog.io

 

주요 차이점

특징DockerContainerd
목적 개발자 친화적인 도구로 이미지 빌드 및 관리, 컨테이너 실행 등 종합적인 기능 제공 경량화된 컨테이너 런타임으로 Kubernetes 등과 통합하여 컨테이너 실행 및 관리 수행
구성 요소 Docker CLI, API, 이미지 빌드 도구, 네트워킹 및 스토리지 지원 포함 단순한 런타임 기능 제공 (이미지 풀링, 컨테이너 생성/관리 등)
사용 사례 개발 환경 및 CI/CD 파이프라인에서 적합 리소스가 제한된 환경 또는 Kubernetes와 같은 오케스트레이션 시스템에 적합
네트워킹 복잡한 네트워킹 구성 지원 (예: 브리지, 오버레이 네트워크) 단순 네트워킹만 지원 (복잡한 네트워크는 CNI를 통해 구현 가능)
OCI 표준 준수 여부 OCI 이미지 및 런타임 사양 준수 OCI 이미지 및 런타임 사양 준수

https://www.tutorialworks.com/difference-docker-containerd-runc-crio-oci/

 

The differences between Docker, containerd, CRI-O and runc

The container ecosystem is full of terms you’re expected to know. We’ve decoded them for you.

www.tutorialworks.com

 

반응형