As a DevOps engineer working on a MacBook M3, I switched from Docker Desktop to Podman. Rootless, daemonless and fully open source Podman fits perfectly into my workflow. In this article I explain how to install Podman on macOS using PowerShell, how to set up Podman Desktop, and which commands you’ll use every day.
What is Podman?
Podman is an open-source container engine developed by Red Hat. The key differences from Docker:
- Rootless containers run as a regular user, no root privileges required
- Daemonless no background service needed, each container is an independent process
- OCI-compatible uses the same images as Docker, commands are largely identical
- Free no licensing costs unlike Docker Desktop for enterprise use
Prerequisites
- macOS (Apple Silicon or Intel)
- Homebrew installed (brew.sh)
- PowerShell 7+ (
brew install --cask powershell)
Step 1: Install Podman via Homebrew
Open PowerShell (pwsh) and run:
# Install Podman CLI
brew install podman
# Install Podman Desktop (GUI)
brew install --cask podman-desktop
# Verify the installation
podman --versionStep 2: Create a Podman Machine
On macOS, containers don’t run directly on the host OS. Podman uses a lightweight virtual machine (Fedora CoreOS) as the container host. On Apple Silicon, an ARM64 image is used automatically.
# Create machine with custom resources
podman machine init `
--cpus 4 `
--memory 4096 `
--disk-size 60 `
--now
# Start the machine
podman machine start
# Check status
podman machine listThe --now flag starts the machine immediately after creation. For default settings, simply run podman machine init.
Step 3: Set up Podman Desktop
Podman Desktop is a native macOS application that provides a graphical interface for your container environment. After installation it offers:
- Visual overview of containers, images, volumes and pods
- Live log viewer per container
- Port-forwarding management
- Kubernetes/Pod configuration
- Extensions for additional integrations
Launch Podman Desktop via Spotlight (Cmd+Space → "Podman Desktop"). The machine you created in step 2 will appear automatically.
Essential Podman Commands
Container management
# List running containers
podman ps
# All containers (including stopped)
podman ps --all
# Start / stop a container
podman start <name>
podman stop <name>
# Stop and remove a container
podman rm -f <name>
# Open a shell inside a container
podman exec -it <name> bash
# Follow container logs
podman logs -f <name>Images
# Pull an image
podman pull ubuntu:22.04
# List local images
podman images
# Remove an image
podman rmi ubuntu:22.04
# Build an image from a Dockerfile
podman build -t my-app:1.0 .Volumes
# Create a volume
podman volume create my-data
# List volumes
podman volume ls
# Start a container with a volume
podman run -d `
--name my-app `
-v my-data:/app/data `
-p 8080:80 `
nginx:latestNetworks
# List networks
podman network ls
# Create a network
podman network create my-network
# Connect a container to a network
podman network connect my-network <name>Pods
Pods are a Podman-specific feature: multiple containers sharing the same network namespace, similar to Kubernetes pods. Port mapping is configured at the pod level.
# Create a pod
podman pod create `
--name my-pod `
-p 8080:80
# Add a container to the pod
podman run -d `
--pod my-pod `
--name frontend `
nginx:latest
# Pod status
podman pod ps
# Stop the pod
podman pod stop my-podMachine management
# Machine status
podman machine list
# Stop machine (saves resources)
podman machine stop
# Start machine
podman machine start
# SSH into the machine (for debugging)
podman machine ssh
# Reset machine (wipes everything!)
podman machine resetUseful tips for macOS
- Port mapping: Always configure this at the pod level, not the container level
- Volume mounts: On Linux you add
:Zfor SELinux compatibility — on macOS this is not needed - ARM64 images: Always use multi-arch images or explicitly pass
--platform linux/arm64 - Start on login: Add
podman machine startas a login item via System Settings → General → Login Items
Conclusion
Podman is an excellent alternative to Docker Desktop on macOS. Its rootless architecture, free license and full Docker compatibility make it a logical choice for any DevOps engineer. With PowerShell as your primary shell and Podman Desktop as the GUI, you have a complete container environment on your MacBook M3.
In the next article I’ll show you how to install HashiCorp Vault in a Podman container including TLS, initialization and unseal key management with PowerShell SecretManagement.