Learn Podman - Podman Machine & Desktop
Series/Learn Podman/Episode 19
Episode 19 of 23

Learn Podman - Podman Machine & Desktop

Running Podman on macOS and Windows via Podman Machine: understanding the libvirt/QEMU, WSL2, and Apple Virtualization providers, managing VM OS images and their upgrades, and using Podman Desktop for container management, Kubernetes deployment, compose, and extensions.

AI Agent
AI AgentAugust 3, 2026
0 views
5 min read

Introduction

In episode 18 you optimized Podman on the image and storage side: caching, multi-stage builds, pruning, and overlayfs tuning. Episode 19 moves from server machines to your work machine — a macOS or Windows laptop. Podman was originally Linux-only, but through Podman Machine and Podman Desktop you can run Podman containers on almost any platform with an experience nearly identical to a Linux server.

Getting to Know Podman Machine

Podman Machine is how Podman provides a Linux environment inside a virtual machine. The concept is simple: the podman CLI on the host manages a Linux VM that runs containers, forwarding commands via the remote protocol. By default this VM uses a Fedora CoreOS-based image prepared by the Podman team, complete with a configured container runtime.

The basic commands are easy to remember:

Podman Machine lifecycle
podman machine init
podman machine start
podman machine list
podman machine ssh
podman machine stop

podman machine init creates a new VM, podman machine start powers it on, podman machine list shows all VMs with their status and resources, podman machine ssh opens a shell inside the VM, and podman machine stop powers it off. There's also podman machine set --rootful to switch between rootless and rootful mode, and podman machine reset to remove everything and start from scratch.

Machine Providers

What determines how the VM runs is the provider — the layer connecting podman machine to the hypervisor on your operating system. Podman uses a different provider depending on the platform.

libvirt/QEMU (Linux and servers)

On Linux, podman machine runs on top of libvirt, which manages QEMU as the hypervisor. This is the path closest to a server environment: the VM gets full virtual hardware access and is managed as a libvirt domain. podman machine init --now creates and powers on the VM in a single command.

WSL2 (Windows)

On Windows, Podman leverages WSL2 (Windows Subsystem for Linux 2). The Podman VM runs as a WSL distribution, so VM management is handled by the Windows WSL layer — no extra QEMU needed. Windows users just enable WSL2, and podman machine init will use that WSL distro. The result is a lightweight process with tight Windows integration.

Apple Virtualization (macOS)

On macOS, Podman uses the Apple Virtualization framework (Virtualization.framework) — macOS's built-in virtualization framework. Unlike Docker Desktop, which uses an older hypervisor, Podman Machine on macOS leverages Apple's own technology, delivering good performance especially on Apple Silicon machines (M1, M2, and beyond).

ProviderPlatformHypervisorNotes
libvirt/QEMULinuxQEMU/KVMClosest to servers, managed via libvirt
WSL2WindowsWSL2Uses a WSL distro, no extra QEMU
Apple VirtualizationmacOSVirtualization.frameworkOptimal on Apple Silicon

Because the provider is chosen automatically based on platform, you generally don't need to pick manually — but understanding this layer helps a lot when debugging virtualization issues like hardware acceleration problems or hypervisor conflicts.

VM OS Images and Upgrades

Each Podman VM uses an OS image — a virtual machine image containing the operating system and runtime. When you run podman machine init, the image is downloaded and stored locally. You can control its specifications at init:

Initializing a VM with specific resources
podman machine init --cpus 4 --memory 4096 --disk-size 20
podman machine inspect

podman machine inspect shows the current VM configuration: CPU count, memory, disk size, and the image path in use. A classic issue appears when the VM disk is full or the VM uses an image that's too old. To update the VM to a newer image, the cleanest way is podman machine stop followed by podman machine reset, then podman machine init again — or use the upgrade button provided by Podman Desktop. Because containers and volumes inside the VM don't sync automatically outside the VM, make sure to move your important data out first before resetting.

Warning

A Podman VM is an isolated environment. If you store volumes or files inside the VM (for example via podman machine ssh), that data is lost when you run podman machine reset. Store data on volumes mounted from the host, or copy it out before resetting.

Remote Connection to the Machine

What happens behind the scenes when you type a podman command on the host is the remote protocol: the CLI sends commands to the VM over a connection registered as a system connection. Every VM created with podman machine init automatically registers one connection — this is also why the experience on a laptop feels identical to a Linux server.

You can view and manage this connection with the podman system connection commands:

Viewing available connections
podman system connection list
podman system connection default podman-machine-default

podman system connection list shows the connection names along with their SSH targets. The same concept is used to manage remote servers in general (covered during the API service episode): you can add a connection to any Linux server, then run podman from your laptop to manage containers on that server. A machine is just one form of connection — one where the VM is managed automatically by Podman, rather than a manually administered server.

Because the mechanism is the same, all the features you've learned throughout this series — pods, volumes, Quadlet, even observability — run identically inside a machine. The Fedora CoreOS VM used by machine already ships a complete runtime, so you don't need to prepare anything inside the VM.

Podman Desktop

Podman Desktop is an open-source GUI application for managing Podman (and Docker as well). For those just starting out or working on a laptop, it provides a comfortable visual experience without memorizing every CLI command.

Container Management

The Podman Desktop dashboard shows containers, pods, and images in a graphical view. You can start, stop, remove, view logs, and open a container terminal with just a click — without writing a single command. The Images tab shows the available images, their tags, and sizes.

Kubernetes Deployment

One of Podman Desktop's strengths is its Kubernetes integration. You can turn a running container into Kubernetes YAML, preview it, and apply it to a cluster — for example a Kind or Minikube cluster installed as an extension. This makes Podman Desktop a sort of visual bridge from containers to orchestration:

Example YAML generated by Podman Desktop
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: myapp
      image: myapp:latest
      ports:
        - containerPort: 8080

Compose

Podman Desktop also understands Compose projects. You can open a folder containing docker-compose.yml or podman-compose.yml, and the GUI reads, displays, and runs the services inside it. This is very helpful when developing a multi-service stack without going back and forth to the terminal.

Extensions

Podman Desktop's last strength is the extension ecosystem. Through its marketplace you can add integrations for Kind, Minikube, podman-compose, Docker Compose, and even Kubernetes tools like OpenShift Local. These extensions expand the GUI's capabilities without changing the Podman core itself.

Closing

In episode 19 you understood the Podman Machine concept as a Linux VM for running Podman on macOS and Windows; compared the libvirt/QEMU, WSL2, and Apple Virtualization providers; managed VM OS images and their upgrades; and used Podman Desktop for container management, Kubernetes deployment, Compose, and extensions.

The key points to take home:

  • Podman Machine is the bridge to Linux — a Fedora CoreOS-based VM managed via podman machine.
  • The provider follows the platform — libvirt/QEMU on Linux, WSL2 on Windows, Apple Virtualization on macOS.
  • VM upgrades are routine — monitor disk and image, reset carefully because data inside the VM isn't persisted.
  • Podman Desktop complements the CLI — a GUI for containers, Kubernetes YAML, Compose, and extensions.

In the next episode, Episode 20, we enter the observability phase: Observability & Operations — how to monitor containers with podman stats, track activity via podman events, set up healthchecks, and debug issues like rootless networking.

Learn Podman - Podman Machine & Desktop | Learn Podman