Rancher is a Kubernetes implementation that can run containers across multiple hosts. Rancher is more comparable to something like Red Hat OpenShift or Hashicorp Nomad than docker.
Wow they should advertise that more. I had no idea and I'm pretty deep in the Red Hat ecosystem.
For a while Kubernetes has included something called the "dockershim", it's own implementation of a CRI interface that, under the hood, calls Docker or Podman, so Kubernetes "pods" run in Docker/Podman. There's also tools like Kind[3] ("kubernetes in docker") that go further- not just hosting Kubernetes worker containers in Docker, but hosting the main kubernetes daemons also in Docker.
Kubernetes deprecated Dockershim, formally in December 2020, but is just throwing the switch now in the upcoming 1.24, expected mid-April[4]. A company Mirantis has pledged to take over support of Dockershim[5], and is calling the new effort "cri-dockerd"[6]. This should allow Kubernetes workers to continue to run via Docker or Podman.
Kind is unaffected, since it runs the main Kubernetes controllers in Docker, which then launch their own opencontainerd (one off the main CRI implementations) inside that Docker container, nested like, so no dockership/cri-dockerd is needed).
Worth re-noting that Podman includes tools to try to run Kubernetes pods directly, without running the rest of Kubernetes.
[1] https://kubernetes.io/blog/2016/12/container-runtime-interfa...
[2] https://github.com/kubernetes/cri-api
[4] https://kubernetes.io/blog/2022/01/07/kubernetes-is-moving-o...
[5] https://www.mirantis.com/blog/mirantis-to-take-over-support-...
I know rancher requires Docker and is not compatible with Podman as of today.
And I believe Red Hat uses Podman in Openshift, their implementation of kubernetes.
i always thought it seemed wrong that it needed either of those to start with.
in most other respects i think it's a drop in replacement.
- does not mess with your iptables unlike docker. Because of this docker can bypass firewall rules set by ufw
- does not creates bridged networks
If you are running kubernetes there are k8s daemons already possibly CRI-O containerd Otherwise the pod is started by systemd, which is another daemon
A Started from the command line using podman, is not a production pattern
There are also a bunch of tools that talk directly to the docker socket.
There are a lot of varying use cases here.
Disclaimer, I started Rancher Desktop.
Totally makes sense when you understand more but initial is surprising.
1. It can form up k8s-style pods for deploying tightly-coupled containers. 2. It can understand k8s YAML for deployment (although obviously it doesn't support everything k8s does), which makes it easier to do deployment config that will work locally with podman and then in a k8s deployment.
Poke around the different moby components like runc, containerd, buildkit, etc. and you'll start to see how they all form part of docker the CLI tool. For example runc runs a container image, and containerd is a service that can run and manage multiple containers at once (each using runc to run). Buildkit is a tool for building container images. All of these tools assume you're on a linux host, but there are tools like linuxkit, hyperkit to make linux VMs for mac and windows hosts that can then run all the other tools.
Tools like podman, rancher desktop, docker, etc. all more or less use those components and compose them in different ways or with different tweaks to support their view of a container workflow.
Feels unexplained (at least for me), how do I know which to choose when and what are the trade offs?
I recently went deeper on Rancher Desktop and it’s use of containerd vs dockerd backends and it is totally not obvious what you lose if not using dockerd and how you might fill the gaps. Feels like because docker established the space and put a bunch of related components together (cli, image building, image storing and container running) and other projects make difference choices it can be quite confusing to compare them.