Tools: Podman Has a Free API — Rootless Containers Without Docker Daemon (2026)
Why Podman Over Docker?
Quick Start
Basic Commands (Same as Docker)
Pods — Kubernetes-Style Grouping
Podman Compose
Rootless Containers
Systemd Integration
Podman REST API Podman is a daemonless container engine that runs containers as your regular user — no root, no daemon, no Docker socket. It's CLI-compatible with Docker but architecturally superior. Need to containerize your scraping infrastructure? Check out my Apify actors for production-ready scrapers, or email [email protected] for custom container-based solutions. Docker or Podman — which do you use in production? Share below! Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse
# Install (Fedora/RHEL)
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install podman # Install (Ubuntu)
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install podman # Install (macOS)
-weight: 500;">brew -weight: 500;">install podman
podman machine init
podman machine -weight: 500;">start
# Install (Fedora/RHEL)
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install podman # Install (Ubuntu)
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install podman # Install (macOS)
-weight: 500;">brew -weight: 500;">install podman
podman machine init
podman machine -weight: 500;">start
# Install (Fedora/RHEL)
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install podman # Install (Ubuntu)
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install podman # Install (macOS)
-weight: 500;">brew -weight: 500;">install podman
podman machine init
podman machine -weight: 500;">start
# Run a container
podman run -d --name web -p 8080:80 nginx # List running containers
podman ps # Exec into container
podman exec -it web bash # Build from Dockerfile
podman build -t myapp . # Push to registry
podman push myapp -weight: 500;">docker.io/myuser/myapp
# Run a container
podman run -d --name web -p 8080:80 nginx # List running containers
podman ps # Exec into container
podman exec -it web bash # Build from Dockerfile
podman build -t myapp . # Push to registry
podman push myapp -weight: 500;">docker.io/myuser/myapp
# Run a container
podman run -d --name web -p 8080:80 nginx # List running containers
podman ps # Exec into container
podman exec -it web bash # Build from Dockerfile
podman build -t myapp . # Push to registry
podman push myapp -weight: 500;">docker.io/myuser/myapp
# Create a pod
podman pod create --name webapp -p 8080:80 -p 5432:5432 # Add containers to the pod
podman run -d --pod webapp --name frontend nginx
podman run -d --pod webapp --name db postgres:16 # Containers in the same pod share localhost
# frontend can reach postgres at localhost:5432 # Generate Kubernetes YAML from pod
podman generate kube webapp > webapp.yaml
# Create a pod
podman pod create --name webapp -p 8080:80 -p 5432:5432 # Add containers to the pod
podman run -d --pod webapp --name frontend nginx
podman run -d --pod webapp --name db postgres:16 # Containers in the same pod share localhost
# frontend can reach postgres at localhost:5432 # Generate Kubernetes YAML from pod
podman generate kube webapp > webapp.yaml
# Create a pod
podman pod create --name webapp -p 8080:80 -p 5432:5432 # Add containers to the pod
podman run -d --pod webapp --name frontend nginx
podman run -d --pod webapp --name db postgres:16 # Containers in the same pod share localhost
# frontend can reach postgres at localhost:5432 # Generate Kubernetes YAML from pod
podman generate kube webapp > webapp.yaml
# Install
-weight: 500;">pip -weight: 500;">install podman-compose # Use your existing -weight: 500;">docker-compose.yml
podman-compose up -d
podman-compose logs -f
podman-compose down
# Install
-weight: 500;">pip -weight: 500;">install podman-compose # Use your existing -weight: 500;">docker-compose.yml
podman-compose up -d
podman-compose logs -f
podman-compose down
# Install
-weight: 500;">pip -weight: 500;">install podman-compose # Use your existing -weight: 500;">docker-compose.yml
podman-compose up -d
podman-compose logs -f
podman-compose down
# No -weight: 600;">sudo needed!
podman run --rm alpine whoami
# Output: root (but it's mapped to your UID on the host!) # Check user namespace mapping
podman unshare cat /proc/self/uid_map
# No -weight: 600;">sudo needed!
podman run --rm alpine whoami
# Output: root (but it's mapped to your UID on the host!) # Check user namespace mapping
podman unshare cat /proc/self/uid_map
# No -weight: 600;">sudo needed!
podman run --rm alpine whoami
# Output: root (but it's mapped to your UID on the host!) # Check user namespace mapping
podman unshare cat /proc/self/uid_map
# Generate systemd -weight: 500;">service from container
podman generate systemd --new --name web > ~/.config/systemd/user/web.-weight: 500;">service # Enable and -weight: 500;">start
-weight: 500;">systemctl --user -weight: 500;">enable --now web.-weight: 500;">service # Container auto-starts on login, auto-restarts on crash
# Generate systemd -weight: 500;">service from container
podman generate systemd --new --name web > ~/.config/systemd/user/web.-weight: 500;">service # Enable and -weight: 500;">start
-weight: 500;">systemctl --user -weight: 500;">enable --now web.-weight: 500;">service # Container auto-starts on login, auto-restarts on crash
# Generate systemd -weight: 500;">service from container
podman generate systemd --new --name web > ~/.config/systemd/user/web.-weight: 500;">service # Enable and -weight: 500;">start
-weight: 500;">systemctl --user -weight: 500;">enable --now web.-weight: 500;">service # Container auto-starts on login, auto-restarts on crash
# Start API socket
podman system -weight: 500;">service --time=0 & # List containers via API
-weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ http://localhost/v4.0.0/libpod/containers/json # Create container via API
-weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ -X POST http://localhost/v4.0.0/libpod/containers/create \ -H 'Content-Type: application/json' \ -d '{"image": "nginx", "name": "webapi"}'
# Start API socket
podman system -weight: 500;">service --time=0 & # List containers via API
-weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ http://localhost/v4.0.0/libpod/containers/json # Create container via API
-weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ -X POST http://localhost/v4.0.0/libpod/containers/create \ -H 'Content-Type: application/json' \ -d '{"image": "nginx", "name": "webapi"}'
# Start API socket
podman system -weight: 500;">service --time=0 & # List containers via API
-weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ http://localhost/v4.0.0/libpod/containers/json # Create container via API
-weight: 500;">curl --unix-socket /run/user/$(id -u)/podman/podman.sock \ -X POST http://localhost/v4.0.0/libpod/containers/create \ -H 'Content-Type: application/json' \ -d '{"image": "nginx", "name": "webapi"}' - No daemon — each container is a child process, not managed by a central -weight: 500;">service
- Rootless by default — containers run as your user, not as root
- Pods — group containers like Kubernetes pods, locally
- Docker-compatible — alias -weight: 500;">docker=podman works for 95% of commands