podman-manifest(1) General Commands Manual podman-manifest(1)

podman-manifest - Create and manipulate manifest lists and image indexes

podman manifest subcommand

The podman manifest command provides subcommands which can be used to:

* Create a working Docker manifest list or OCI image index.

Command Man Page Description
add podman-manifest-add(1) Add an image or artifact to a manifest list or image index.
annotate podman-manifest-annotate(1) Add and update information about an image or artifact in a manifest list or image index.
create podman-manifest-create(1) Create a manifest list or image index.
exists podman-manifest-exists(1) Check if the given manifest list exists in local storage
inspect podman-manifest-inspect(1) Display a manifest list or image index.
push podman-manifest-push(1) Push a manifest list or image index to a registry.
remove podman-manifest-remove(1) Remove an image from a manifest list or image index.
rm podman-manifest-rm(1) Remove manifest list or image index from local storage.

Assuming the Containerfile uses RUN instructions, the host needs a way to execute non-native binaries. Configuring this is beyond the scope of this example. Building a multi-arch manifest list shazam in parallel across 4-threads can be done like this:

    $ platarch=linux/amd64,linux/ppc64le,linux/arm64,linux/s390x
    $ podman build --jobs=4 --platform=$platarch --manifest shazam .

Note: The --jobs argument is optional. Do not use the podman build command's --tag (or -t) option when building a multi-arch manifest list.

Assuming example.com/example/shazam:$arch images are built separately on other hosts and pushed to the example.com registry. They may be combined into a manifest list, and pushed using a simple loop:

    $ REPO=example.com/example/shazam
    $ podman manifest create $REPO:latest
    $ for IMGTAG in amd64 s390x ppc64le arm64; do   
              podman manifest add $REPO:latest docker://$REPO:IMGTAG;   
          done
    $ podman manifest push --all $REPO:latest

Note: The add instruction argument order is <manifest> then <image>. Also, the --all push option is required to ensure all contents are pushed, not just the native platform/arch.

Special care is needed when removing and pushing manifest lists, as opposed to the contents. You almost always want to use the manifest rm and manifest push --all subcommands. For example, a rename and push can be performed like this:

    $ podman tag localhost/shazam example.com/example/shazam
    $ podman manifest rm localhost/shazam
    $ podman manifest push --all example.com/example/shazam

podman(1), podman-manifest-add(1), podman-manifest-annotate(1), podman-manifest-create(1), podman-manifest-inspect(1), podman-manifest-push(1), podman-manifest-remove(1)