← Back to blog

Docker was my default container tool for years. It was reliable, familiar, and supported by almost every tutorial and CI example I used. I did not move away from it because it was broken. I moved because my development environment became more Linux-native, more container-heavy, and more focused on reproducibility.

Podman fit that direction better. It gave me Docker-compatible commands without a root-owned daemon, better systemd integration, and a rootless model that felt more natural for local development on NixOS.

Podman kept the familiar container workflow while removing the always-running Docker daemon from my local setup.

The daemon was the real reason

Docker uses a client-server model. The client talks to a daemon that manages containers. That daemon is powerful and usually runs with elevated privileges. It works, but it also creates a central process that owns a lot of authority on the machine. For local development, I wanted less ambient privilege.

Podman does not need that daemon. A container is launched as a process under the user who started it. In rootless mode, the container can think it is root internally while mapping back to an unprivileged user on the host. That does not make containers magically safe, but it does reduce the blast radius of a bad local setup.

podman-basics.sh
podman run --rm -it alpine sh
podman build -t local-app .
podman ps
podman generate systemd --name local-app --files

The migration was less dramatic than expected

Most commands transferred directly. Dockerfiles kept working. Image names kept working. The muscle memory stayed mostly intact. The places that needed attention were networking, compose workflows, and long-running services that I wanted systemd to manage.

On NixOS, that last part became a benefit. Instead of relying on Docker restart policies, I could describe containers as services and let systemd handle lifecycle, logs, restart behavior, and boot-time startup. That made my development infrastructure feel like part of the system rather than a separate daemon world.

Where Podman is not a free win

Rootless networking can behave differently from Docker bridge networking. Some compose setups need small adjustments. A team already invested in Docker Desktop may not gain much by switching. I would not recommend changing tools just to feel more technically pure.

For my own setup, the tradeoff was worth it. I wanted rootless containers, systemd-managed services, and a container workflow that matched a declarative Linux machine. Podman gave me that without forcing me to relearn everyday commands.

Next post →
© 2026 mont3llAvailable for work
loading portfolio000%