Choosing a container runtime
Docker Desktop or Podman: how to decide, and what changes when you switch.
containersdockerpodmandecision-guide
Choosing a container runtime
Most people in the club will start with Docker Desktop. A meaningful number will eventually move to Podman. This page is about when that move is worth it and what actually breaks.
The short version
| Situation | Choose |
|---|---|
| First time running containers | Docker Desktop |
| Personal laptop, hobby use | Either — Docker Desktop is smoother |
| Company above Docker's free-tier thresholds | Podman (or Docker with paid subscriptions) |
| You want rootless by default | Podman |
Your tooling hardcodes /var/run/docker.sock |
Docker Desktop, unless you configure Podman's Docker socket |
| You want one tool that "just works" for a workshop | Docker Desktop |
The licence question comes first
Docker Desktop is a commercial product with a genuinely free tier: personal use, education, non-commercial open source, and businesses under 250 employees and $10M revenue. Above that, each developer needs a subscription — and it is the desktop app, not the engine, that carries this term.
Docker's engine (Moby) is Apache-2.0. Podman is Apache-2.0 including its desktop GUI. So if your reason for switching is licence cleanliness, Podman solves it cleanly. If your reason is "Docker annoyed me once", switching will cost you more evenings than it saves.
What actually changes on macOS and Windows
Both runtimes execute containers inside a managed Linux VM. The difference is who manages it.
- Docker Desktop hides the VM. Install, launch, run containers.
- Podman exposes it as
podman machine. You must create and start the machine before containers work, and its disk size is something you set.
That is the single biggest beginner-experience gap.
What changes technically
- Daemon. Docker runs a long-lived daemon. Podman does not; containers are child processes of the CLI. This makes Linux debugging simpler and means there is no always-on privileged service.
- Rootless. Podman defaults to rootless. Docker can be configured rootless but is not by default.
- Host naming. From inside a container, Docker's host alias is
host.docker.internal; Podman Desktop's ishost.containers.internal. The Hermes devcontainer maps both precisely because this trips people up. - Docker socket. Tools that expect
/var/run/docker.sockneed Podman's Docker-compatible socket enabled explicitly. Without it, devcontainers and some agent setups fail in confusing ways. - Compose.
podman composeprovides the workflow; compatibility is good but not pixel-perfect.
Migration advice
- Keep Docker Desktop installed until the Podman path works end to end for the tools you actually use.
- Test the single hardest case first — usually a devcontainer or a container that talks to a host-bound model server.
- Do not run both machines simultaneously and expect tools to pick the right socket.
Related
Licensing thresholds were read from Docker's licensing documentation on 2026-10-28. Licence terms change: confirm with Docker before a commercial rollout. Podman's rootless-by-default and daemonless behaviour are from the official Podman documentation.