Diving into Podman image management: pull and push, tags as name aliases, save and load with oci-dir and docker-dir formats, reading layer history, creating multi-arch manifests, inspecting images with Skopeo, and the role of image digests as immutable references.

Episode 3 covered container management. Episode 4 steps up to something more upstream: images — the raw material of every container. You'll learn to pull and push images, tag them, save and load them as files, read layer history, and use manifests for multi-architecture images.
An image is a read-only blueprint. One image can be used to create many containers, and a container only adds a thin writable layer on top of it. Podman's image commands:
| Command | Function |
|---|---|
podman pull | Downloads an image from a registry |
podman push | Sends an image to a registry |
podman tag | Gives an image a name or alias |
podman save | Saves an image to a file |
podman load | Loads an image from a file |
podman history | Shows an image's layer history |
podman rmi | Removes an image |
podman images | Lists local images |
The most basic flow is pulling an image, tagging it, and pushing it to a registry:
podman pull quay.io/nginx/nginx:latest
podman tag quay.io/nginx/nginx:latest myrepo/nginx:v1
podman push myrepo/nginx:v1podman tag doesn't duplicate the image — it only adds a name reference. One image can have many tags at once. podman push sends the image to a registry, usually requiring authentication via podman login.
Sometimes you need to move an image without a registry — for example between servers on an offline network. Podman provides two file storage formats:
| Format | Option | Description |
|---|---|---|
| oci-dir | --format oci-dir | Native OCI format, a directory containing manifest and layers |
| docker-dir | --format docker-dir | Docker format, a directory containing the legacy manifest |
podman save --format oci-dir -o nginx-image nginx:latest
podman load -i nginx-imagepodman save -o nginx-image writes the image to a directory, podman load -i nginx-image reads it back into local storage. The docker-dir format is useful when the image will be read by tools that don't support OCI yet.
Images are made of stacked layers. To see how an image was built layer by layer:
podman history nginx:latest
podman imagespodman history shows every layer, the command that created it, and its size. podman images lists local images with size and tags. To remove an image you no longer use, use podman rmi. Shared layers (for example the same base image) are stored only once in storage — this is why dozens of containers from the same image stay space-efficient.
Modern images aren't always a single architecture. A manifest holds a list of image variants for different architectures — for example amd64 and arm64 — under one reference. This is what makes podman pull nginx automatically fetch the version that matches your architecture.
With podman manifest you can combine several images into one multi-arch manifest:
podman manifest create myapp
podman manifest add myapp myapp:amd64
podman manifest add myapp myapp:arm64
podman manifest push myapp docker.io/myrepo/myapp:latestpodman manifest create creates an empty manifest, podman manifest add adds one image per architecture, and podman manifest push sends it to the registry as a single reference.
To inspect a manifest or image in a registry without pulling it into local storage, Skopeo is the right tool:
skopeo inspect docker://quay.io/nginx/nginx:latest
skopeo inspect --raw docker://myrepo/myapp:latestskopeo inspect shows image metadata like architecture, layers, and labels. skopeo inspect --raw shows the raw manifest — useful for viewing the list of variants in a multi-arch manifest.
Every image has a digest, a unique hash of the image's content. Unlike a tag, which can be moved to another image, a digest refers to the same content forever.
podman images --digestsThe DIGEST column in the output shows that hash value. You can pull an image by digest reference, for example podman pull nginx@sha256:... — a format that guarantees the image you get is truly the one you expect.
Tip
Use digest references for deployments that need version certainty — podman pull nginx@sha256:.... A tag can switch images, a digest will never change for the same content.
Episode 4 completes image management: pull and push, tags as name aliases, save and load with oci-dir and docker-dir formats, layer history via history, removal with rmi, multi-arch manifests, inspect with Skopeo, and digests as immutable references.
The key points to take home:
podman history opens up how an image was built.The next episode, Episode 5, dives into rootless and daemonless mode: user namespace remapping, resource limits without sudo, networking with slirp4netns and pasta, and podman machine for macOS and Windows.