Skip to content
Back to Deployment

Deploying with Podman

Daemonless, rootless container engine compatible with Docker CLI.

ContainersIntermediate

Why

Podman is daemonless and rootless — no background daemon, containers run as non-root user. It's CLI-compatible with Docker and supports pods (like K8s).

Docker is used by 59% of professional developers per the Stack Overflow 2024 survey, and Kubernetes runs 60% of containerized workloads in production (CNCF 2024 survey). Container orchestration reduces deployment-related incidents by 35% through declarative rollouts.

When

Use Podman for rootless containers on Linux, CI without Docker daemon, and K8s pod YAML. Avoid on Mac/Windows (uses VM).

How

1. Install — package manager on Linux 2. Run — podman run, same as docker run 3. Build — podman build, reads Dockerfile 4. Pod — podman pod create, group containers 5. Compose — podman-compose (or podman compose) 6. Rootless — runs as your user, no sudo 7. Generate — podman generate kube for K8s YAML

Example

# Same commands as Docker podman run -d -p 3000:3000 myapp:latest podman build -t myapp . podman ps podman logs <container> # Podman pod — group containers podman pod create --name mypod -p 8080:80 podman run -d --pod mypod nginx podman run -d --pod mypod redis # Generate K8s YAML from pod podman generate kube mypod > mypod.yaml kubectl apply -f mypod.yaml # Rootless — no sudo needed podman run -v $HOME/data:/data alpine # mounts user dir

Common Problems

  • ⚠Port < 1024 needs root — rootless can't bind 80/443, use 8080/8443 or sysctl
  • ⚠No Docker daemon — some tools expect docker socket, use podman-docker shim
  • ⚠Configuration drift between environments — use infrastructure-as-code (Terraform/Pulumi) to keep dev/staging/prod identical

Best Practices

  • ✓Run rootless — better security, no root container escapes
  • ✓Use podman generate kube — convert local pods to K8s manifests for portability
  • ✓Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit

FAQ