Docker
- 도커는 컨테이너를 만들고 관리하기 위한 전체 플랫폼이다.
- 컨테이너 이미지의 생성, 배포, 실행뿐만 아니라 네트워킹, 볼륨 관리 등과 같은 고급 기능을 제공한다.
- 도커는 사용자 친화적인 명령어 인터페이스를 제공하며, 개발자들이 컨테이너를 쉽게 사용할 수 있도록 돕는다.
- 도커 자체는 컨테이너드를 포함하고 있어, 컨테이너 생명 주기 관리 기능을 사용할 수 있다.
containerd
- 컨테이너드는 컨테이너 런타임 환경을 제공하는 가볍고 독립적인 도구이다.
- 이는 컨테이너의 생명 주기를 관리하는 기본 기능(컨테이너 실행, 중지, 삭제 등)을 제공한다.
- 컨테이너드는 도커와 같은 상위 레벨의 컨테이너 플랫폼에서 사용될 수 있으며, 이들 플랫폼이 컨테이너를 관리하는 데 필요한 기본 동작을 수행하는 데 사용된다.
정리하면, containerd 는 container 를 생성, 실행, 삭제하는 기능만 제공하고 docker는 이러한 containerd를 내부적으로 사용하면서 컨테이너 생명주기 관리 뿐 아니라 이외의 작업(네트워킹, 볼륨 관리 등) 을 지원하며 사용자 편의를 높인 서비스를 제공한다는 것이다.
k8s에서는 어떤 툴을 사용할까?
초기에 쿠버네티스는 도커 엔진을 컨테이너 런타임으로 사용했다. 그러나, 쿠버네티스 개발자들은 더 가볍고, 표준화된 컨테이너 런타임을 사용할 필요성을 느끼게 되었고, 이에 따라 컨테이너디와 같은 다른 런타임을 지원하기 시작했으며 이후 도커엔진을 직접적으로 사용하지 않게 되었다.
이유는 위에서 언급한 바와 같이 containerd 가 도커 엔진보다 가볍기 때문이다. 컨테이너디를 사용함으로써 쿠버네티스는 보다 효율적으로 컨테이너를 생성, 실행, 중지 및 삭제할 수 있으며, 시스템 자원을 더 효율적으로 관리할 수 있게 되었다.
[+] kubectl vs crictl
kubectl 과 crictl은 모두 쿠버네티스가 제공하는 명령 모음이나, 구체적인 사용목적에 차이가 있다.
kubectl
- 쿠버네티스 클러스터의 전반적인 관리와 운영을 위한 도구이다. 파드(Pods), 서비스(Services), 디플로이먼트(Deployments)와 같은 다양한 쿠버네티스 리소스의 생성, 관리, 삭제 등을 담당한다. 이 도구는 쿠버네티스 API와 상호작용하여 클러스터의 고수준 작업을 수핸한다.
crictl
- 컨테이너 런타임과 관련된 저수준의 작업을 위한 도구이다. 이는 컨테이너의 생명 주기(생성, 실행, 중지, 삭제), 로그 확인, 이미지 관리 등 컨테이너 단위의 작업에 집중한다. crictl은 주로 CRI(Container Runtime Interface) 호환 컨테이너 런타임을 관리하는 데 사용된다.
[+] nerdctl
- nerdctl은 컨테이너 관리를 위한 명령줄 도구로, containerd 컨테이너 런타임을 위해 되었다. 이 도구는 containerd의 기능을 직접적으로 사용자에게 제공하며, 도커(Docker)의 사용자 경험에 가까운 인터페이스를 제공한다. 쿠버네티스에서 제공되지 않는 명령줄 도구이다.