Free Online Course · Self-paced · Hands-on

Podman Tutorial: Complete Container Guide for Linux

Free Podman tutorial tested on RHEL 10.2 with Podman 5.8: run rootless containers, build images, set up networking, and deploy services with Quadlet.

  • 13 chapters
  • 98 lessons
  • ~24h
  • Beginner to Intermediate
  • Tested with Podman 5.8.2
  • Updated Sep 2026
Podman Tutorial: Complete Container Guide for Linux
By Last updated

About this course

This free course takes you from your first podman run to containers that start at boot as systemd services. It covers images and builds, volumes, networking, rootless Podman, pods, Quadlet, registries, and Kubernetes YAML, and the commands follow the upstream Podman documentation. Every lesson was run on RHEL 10.2 with Podman 5.8.2, the release RHEL 10 ships today.

Most Podman guides stop at "it works like Docker". This course spends its longest chapter on Quadlet, the systemd integration that replaces the deprecated podman generate systemd, because that is how Podman containers usually run in production. The Troubleshooting Library is organised by the exact error message you see, such as permission denied on volumes, short-name resolution failures, and containers that stop after logout.

If you are new to containers, start with Getting Started and go in order. If you already use Docker, read Podman vs Docker and then jump to Rootless Podman or Quadlet and systemd. If something is broken right now, go straight to the Podman troubleshooting guide.

What you'll learn

  • Explain how Podman runs OCI containers without a long-lived daemon
  • Install Podman on major Linux families and verify the runtime stack
  • Run, inspect, and manage containers and images with the Podman CLI
  • Attach volumes, publish ports, and build custom images with Containerfiles
  • Operate rootless Podman safely with user namespaces and subuid mapping
  • Group containers in pods and deploy production units with Quadlet and systemd
  • Troubleshoot registry TLS, storage, DNS, permissions, and Quadlet startup failures

Who this course is for

  • Linux administrators who want to run containers on RHEL, Fedora, Rocky Linux, or Ubuntu servers without a root daemon
  • Docker users moving existing workloads, Compose files, and scripts over to Podman
  • DevOps engineers who want containers managed as ordinary systemd services through Quadlet
  • Developers who test Kubernetes YAML locally before it reaches a cluster

Prerequisites

  • Comfortable Linux command line, including files, users, systemd services, and package installs
  • One Linux VM or workstation with outbound HTTPS to pull images. The lessons use RHEL 10.2, with install guides for Rocky Linux, Ubuntu, and Debian
  • sudo access for installs and the rootful examples. The rootless lessons run as a normal user
  • Docker experience helps with the command comparisons but is not required

Versions and testing environment

Every command in this course was run on this stack

ComponentVersionNotes
Podman 5.8.2 The podman-5.8.2-5.el10_2 package, used for almost every lesson
Red Hat Enterprise Linux 10.2 Lab host. The install lessons also cover Rocky Linux, Ubuntu 24.04, and Debian 12 and 13
Netavark and aardvark-dns 1.17.x Network backend and container DNS for the networking lessons
podman-compose 1.5.0 Used in the Compose lesson alongside podman compose
Podman 6 6.1.0 Fedora Rawhide container, used only to validate the Podman 5 to 6 migration lesson

Syllabus

13 chapters · 98 lessons · ~24h of reading

  1. 1 Getting Started — Concepts and Install 9 lessons · ~1h 32m
    1. Part 1 What Is Podman and How Does It Work? 11 min read
    2. Part 2 Podman vs Docker: Differences, Commands and Architecture 12 min read
    3. Part 3 Podman Architecture: How Containers Run Without a Daemon 14 min read
    4. Part 4 Install Podman on RHEL 11 min read
    5. Part 5 Install Podman on Ubuntu 8 min read
    6. Part 6 Install Podman on Debian 6 min read
    7. Part 7 Install Podman on Rocky Linux, AlmaLinux & CentOS Stream 7 min read
    8. Part 8 Podman 5 to 6 Migration: Breaking Changes and Upgrade Guide 14 min read
    9. Part 9 Podman Commands: Complete CLI Guide 9 min read
  2. 2 Working with Containers 6 lessons · ~1h 5m
    1. Part 10 Run Containers with podman run 10 min read
    2. Part 11 List and Filter Containers with podman ps 12 min read
    3. Part 12 Start, Stop and Restart Podman Containers 12 min read
    4. Part 13 Run Commands Inside a Podman Container with podman exec 9 min read
    5. Part 14 Copy Files To and From Podman Containers 10 min read
    6. Part 15 Remove Podman Containers 12 min read
  3. 3 Images and Builds 7 lessons · ~1h 3m
    1. Part 16 Manage Container Images with Podman 10 min read
    2. Part 17 Pull Container Images with Podman 9 min read
    3. Part 18 Build Container Images with Podman 11 min read
    4. Part 19 Podman Containerfile: Build Custom Container Images 11 min read
    5. Part 20 Save and Load Podman Container Images 9 min read
    6. Part 21 podman save vs export vs import vs load Coming soon
    7. Part 22 Build Multi-Architecture Images with Podman Manifest 13 min read
  4. 4 Volumes and Storage 6 lessons · ~54 min
    1. Part 23 Podman Volumes: Persistent Container Storage 15 min read
    2. Part 24 Podman Bind Mount vs Volume 11 min read
    3. Part 25 Podman -v vs --mount Coming soon
    4. Part 26 Podman Volume Permissions and Ownership 16 min read
    5. Part 27 Podman SELinux Volume Mounts: :z vs :Z Coming soon
    6. Part 28 Podman Storage Location and storage.conf 12 min read
  5. 5 Networking 7 lessons · ~1h 14m
    1. Part 29 Podman Networking: Netavark, DNS and Network Modes 12 min read
    2. Part 30 Create and Manage Podman Networks 14 min read
    3. Part 31 Podman Port Mapping and Port Publishing 12 min read
    4. Part 32 Podman Container-to-Container Networking Coming soon
    5. Part 33 Access the Host from a Podman Container 12 min read
    6. Part 34 Podman DNS and Container Name Resolution 10 min read
    7. Part 35 Rootless Podman Networking with pasta 14 min read
  6. 6 Rootless Podman 7 lessons · ~59 min
    1. Part 36 Rootless Podman: Run Containers Without Root 13 min read
    2. Part 37 Rootless vs Rootful Podman 9 min read
    3. Part 38 Fix Podman subuid and subgid Errors Coming soon
    4. Part 39 Podman User Namespaces and UID Mapping 15 min read
    5. Part 40 Podman userns keep-id vs auto Coming soon
    6. Part 41 Podman unshare: Manage Rootless Container UID and GID Ownership 12 min read
    7. Part 42 Fix Rootless Podman Cannot Bind to Port 80 or 443 10 min read
  7. 7 Pods 3 lessons · ~27 min
    1. Part 43 Podman Pods: Run Multiple Containers Together 14 min read
    2. Part 44 Podman Pod vs Container Coming soon
    3. Part 45 Podman Pod Networking and Port Mapping 13 min read
  8. 8 Quadlet and systemd 13 lessons · ~1h 59m
    1. Part 46 Podman Quadlet: Run Containers with systemd Coming soon
    2. Part 47 Rootless Podman Quadlet with systemd 12 min read
    3. Part 48 Podman Quadlet .container File Explained 11 min read
    4. Part 49 Podman Quadlet Volume and Network Units 12 min read
    5. Part 50 Run Podman Pods with Quadlet 13 min read
    6. Part 51 Podman Quadlet Build, Image and Artifact Units 11 min read
    7. Part 52 Podman Quadlet CLI: install, list, print and rm 12 min read
    8. Part 53 Podman Quadlet Environment Variables and Secrets Coming soon
    9. Part 54 Podman Quadlet Dependencies and Startup Order Coming soon
    10. Part 55 Automatically Update Podman Containers with Quadlet 11 min read
    11. Part 56 Migrate from podman generate systemd to Quadlet 11 min read
    12. Part 57 Troubleshoot and Debug Podman Quadlet 11 min read
    13. Part 58 podmansh: Confine Users to a Podman Container Shell 15 min read
  9. 9 Registry and Configuration 8 lessons · ~1h 38m
    1. Part 59 Podman Login and Container Registry Authentication 11 min read
    2. Part 60 Push Podman Images to a Container Registry 11 min read
    3. Part 61 Manage OCI Artifacts with podman artifact 12 min read
    4. Part 62 Podman registries.conf Explained 12 min read
    5. Part 63 Podman containers.conf Explained 13 min read
    6. Part 64 Manage Container Secrets with Podman 14 min read
    7. Part 65 Verify Container Image Signatures with Podman 13 min read
    8. Part 66 Configure Podman for a Private Container Registry 12 min read
  10. 10 Compose, Migration, and Kubernetes 7 lessons · ~1h 33m
    1. Part 67 Podman Compose: Run Compose Files with Podman 12 min read
    2. Part 68 Migrate from Docker to Podman 15 min read
    3. Part 69 Checkpoint and Restore Podman Containers with CRIU 12 min read
    4. Part 70 Manage Remote Podman Hosts with podman-remote 14 min read
    5. Part 71 Podman Socket and Docker API Compatibility 12 min read
    6. Part 72 Run Kubernetes YAML with podman kube play 16 min read
    7. Part 73 Generate Kubernetes YAML from Podman Containers 12 min read
  11. 11 Monitoring and Operations 8 lessons · ~1h 32m
    1. Part 74 View and Follow Container Logs with Podman 11 min read
    2. Part 75 Inspect Podman Containers, Images and Networks 11 min read
    3. Part 76 Monitor Container CPU and Memory with podman stats 12 min read
    4. Part 77 Set CPU and Memory Limits for Podman Containers 11 min read
    5. Part 78 Podman Healthchecks: Monitor Container Health 12 min read
    6. Part 79 Monitor Container Events with podman events 12 min read
    7. Part 80 Clean Up Podman Storage with system prune and system df 12 min read
    8. Part 81 podman update: Change an Existing Container 11 min read
  12. 12 Troubleshooting Library 16 lessons · ~3h 14m
    1. Part 82 Podman Troubleshooting Guide 11 min read
    2. Part 83 Fix Podman Volume 'Permission Denied' 16 min read
    3. Part 84 Fix Rootless Podman 'Permission Denied' 13 min read
    4. Part 85 Fix Podman Container Cannot Access Internet 11 min read
    5. Part 86 Fix Podman Container DNS Not Working 10 min read
    6. Part 87 Fix Podman Port Mapping Not Working 14 min read
    7. Part 88 Fix Podman `exec format error` 12 min read
    8. Part 89 Fix Podman Container Exits Immediately 12 min read
    9. Part 90 Fix Podman Container Stops After Logout or Reboot 10 min read
    10. Part 91 Troubleshoot and Debug Podman Quadlet 11 min read
    11. Part 92 Fix Podman Short-Name Resolution Errors 10 min read
    12. Part 93 Fix Podman 'x509: Certificate Signed by Unknown Authority' 12 min read
    13. Part 94 Fix Podman toomanyrequests Docker Hub Pull Rate Limit 10 min read
    14. Part 95 Fix Podman 'No Space Left on Device' 14 min read
    15. Part 96 Repair Podman Storage Corruption and system reset 13 min read
    16. Part 97 Fix Podman 'Not Enough IDs Available in Namespace' 15 min read
  13. 13 Reference 1 lesson · ~9 min
    1. Part 98 Podman Cheat Sheet: Commands for Containers, Images, Volumes and Networks 9 min read

Hands-on labs

6 guided builds you run yourself

  1. Build a custom image from a Containerfile

    Write a Containerfile with a non-root user, a health check, and a multi-stage build, then build and run the image.

  2. Run a rootless service with Quadlet

    Drop a .container file into the user search path, manage it with systemctl --user, and enable linger so it survives logout and reboot.

  3. Stand up a private registry with TLS and authentication

    Run a registry container, add a SAN certificate and htpasswd login, trust its CA in Podman, and push and pull an image.

  4. Update containers automatically from a registry

    Mark a Quadlet container with AutoUpdate=registry, dry-run and apply updates, and schedule them with the auto-update timer.

  5. Run Kubernetes YAML locally

    Start a pod from a manifest with ConfigMaps, Secrets, and volumes, replace it in place, and tear it down with kube down.

  6. Migrate a Docker workload to Podman

    Inventory a Docker host, translate its commands, Compose files, and volumes, and move long-running services to Quadlet.

Where to go after this course

  • Podman Cheat SheetThe commands from every chapter on one page, for when you only need the flag.
  • Podman documentationThe upstream man pages for each command and Quadlet unit type, updated with every release.
  • Kubernetes courseTake the YAML you ran with podman kube play to a real cluster with scheduling, Services, and controllers.
  • Keycloak courseA practical next project, because its container labs run Keycloak with Podman and PostgreSQL.

Frequently Asked Questions

Should I learn Podman 5 or Podman 6?

Learn the version your distribution ships. The current upstream release is Podman 6.1.2, published in September 2026, while RHEL 10.2 ships Podman 5.8.2, and the lessons here were written on 5.8.2. Almost every command is the same in both. Podman 6 removes BoltDB, CNI networking, slirp4netns, cgroups v1, and the iptables firewall backend, so older setups need changes before they upgrade. The Podman 5 to 6 migration guide covers what to check.

Can I run Podman on Windows or macOS?

Yes, through a Podman machine. On macOS each machine is a Linux virtual machine, and on Windows it runs as a WSL 2 distribution. The podman command on your desktop talks to the Podman service inside that machine, and it also accepts Docker API clients. The Podman installation guide covers setup. This course targets Linux hosts, so rootless user namespaces, SELinux labels, and Quadlet behave as described only on Linux.

Is Podman a drop-in replacement for Docker?

For most command-line use, yes. Podman accepts the same run, build, ps, and exec syntax, the optional podman-docker package adds a docker command, and the Podman socket serves the Docker API to tools that expect it. The differences show up in how the pieces fit together. Podman has no long-running daemon, runs rootless by default for normal users, uses systemd instead of a restart daemon for services, and has no equivalent of Docker Swarm.

Can I use my Docker Compose files with Podman?

Usually, yes. podman compose hands the file to a Compose provider, and podman-compose 1.5.0 ran the Compose examples in this course. Most compose.yaml files work unchanged, although bind mounts may need SELinux labels on RHEL-family hosts. For services that must start at boot, converting the Compose file to Quadlet units gives you systemd dependency handling and restart behaviour.

Which Linux distribution should I use to follow along?

Any current distribution works for the core container commands. The lessons were run on RHEL 10.2, and Rocky Linux 10 and AlmaLinux 10 behave the same way. Ubuntu 24.04 ships Podman 4.9.3 and Debian 12 ships 4.3.1, so newer commands covered here, such as podman quadlet and podman artifact, are missing on those releases. The install lessons show how to check the packaged version before you start.

Deepak Prasad

R&D Engineer

Founder of GoLinuxCloud with 15+ years of expertise in Linux, Python, Go, Laravel, DevOps, Kubernetes, Git, Shell scripting, OpenShift, AWS, Networking, and Security. With extensive experience, he excels across development, DevOps, networking, and security, delivering robust and efficient solutions for diverse projects.

  • Go (programming language)
  • Python (programming language)
  • DevOps
  • Computer Security
  • Cloud Computing
  • Kubernetes
  • Linux
  • Ansible (software)