About the Podman cheat sheet
Podman's command set deliberately mirrors Docker's, so most Docker knowledge transfers directly and an alias covers the majority of everyday use. The differences that matter are architectural: there is no long-running daemon, and containers can run entirely as an unprivileged user.
Daemonless design changes the operational model. Each container is a child of the process that started it, so there is no central service to fail and take everything with it, and containers can be managed as systemd units like any other service. That last property is why Podman fits well on servers where systemd is already the supervisor.
Rootless is the headline security feature and the source of most surprises. Containers run in a user namespace where root inside maps to your unprivileged user outside, so a container escape lands as a normal user rather than as root. The cost is that low ports, some networking and certain volume ownership behaviours work differently.
Frequently asked questions
Can I use Docker commands with Podman?
Largely yes — the CLI is intentionally compatible and aliasing docker to podman works for most everyday commands. Differences appear around anything assuming a daemon or a Docker socket. Podman can expose a compatible socket for tools that require one, which covers most of the remaining gap.
Why can my rootless container not bind port 80?
Unprivileged users cannot bind ports below 1024. Publish a high port and put a reverse proxy in front, or lower the unprivileged port threshold at the system level if you control the host. Running the container as root to get the port defeats the main reason to use rootless.
What are pods in Podman?
A pod groups containers sharing a network namespace, the same concept Kubernetes uses. Containers in a pod reach each other on localhost, which makes it a genuinely useful way to model a sidecar arrangement locally. Podman can also generate Kubernetes YAML from a running pod, which is handy for moving a local setup toward a cluster.
How do I run containers as services?
Generate systemd units from containers or pods, or use Quadlet, which lets you declare containers as systemd unit files directly. This is the idiomatic approach on a server: the container becomes an ordinary service with normal dependency handling, logging and restart policy, supervised by systemd rather than a container daemon.
Does rootless affect volume permissions?
Yes, and it is the most common friction point. User namespace mapping means a file owned by your user outside appears with a different ownership inside, so a container process may be unable to write to a bind mount that looks correct. Use the relabel and user-namespace mount options rather than loosening permissions on the host directory.