Since v1.6.0, Kubernetes has enabled the use of CRI, Container Runtime Interface, by default. The container runtime used by default is Docker, which is enabled through the built-in dockershim CRI implementation inside of the kubelet.
Other CRI-based runtimes which can be Alternative of Docker in Kubernetes include:
containerd (CRI plugin built into containerd) – cri is a containerd plugin implementation of Kubernetes container runtime interface (CRI). With it, you could run Kubernetes using containerd as the container runtime. cri is a native plugin of containerd 1.1 and above. It is built into containerd and enabled by default.
More info – https://github.com/containerd/cri
cri-o – CRI-O is meant to provide an integration path between OCI conformant runtimes and the kubelet. Specifically, it implements the Kubelet Container Runtime Interface (CRI) using OCI conformant runtimes. The scope of CRI-O is tied to the scope of the CRI.
More Info – https://github.com/kubernetes-sigs/cri-o
frakti – Frakti lets Kubernetes run pods and containers directly inside hypervisors via runV. It is light weighted and portable, but can provide much stronger isolation with independent kernel than linux-namespace-based container runtimes.
More Info – https://github.com/kubernetes/frakti
rkt – rktlet is a Kubernetes Container Runtime Interface implementation using rkt as the main container runtime. rkt is an ongoing CNCF effort to develop a pod-native container runtime. The goal of this project is to eventually supplant the rkt package in the main Kubernetes repository.
More info – https://github.com/kubernetes-incubator/rktlet