Initially, Kubernetes supported only Docker. Gradually, tools like Rocket came into the picture. In order to support many such tools in the Kubernetes ecosystem, Kubernetes introduced the CRI (Container Runtime Initiative). It basically contains the image spec that guides how an image has to be written and a runtime spec which directs how a runtime works. This helped other container technologies to work with Kubernetes.
Docker was the most popular choice, and hence Kubernetes introduced dockershim, which could be used with CRI. Gradually, Kubernetes removed Docker as the default choice of container technology. Now, users can choose any container technology of their choice as long as it supports the CRI (Container Runtime Interface).
In the Docker environment, containerd is the runtime used. The command-line utility CTL, which has limited features, is used. A better alternative is NerdCTL. In Kubernetes, crictl is primarily used for debugging purposes.