buildah-manifest - Create and manipulate manifest lists and image indexes.
buildah manifest COMMAND [OPTIONS] [ARG...]
The buildah manifest
command provides subcommands which can be used to:
* Create a working Docker manifest list or OCI image index.
* Add an entry to a manifest list or image index for a specified image.
* Add an entry to an image index for an artifact manifest referring to a file.
* Add or update information about an entry in a manifest list or image index.
* Delete a working container or an image.
* Push a manifest list or image index to a registry or other location.
Command | Man Page | Description |
---|---|---|
add | buildah-manifest-add(1) | Add an image or artifact to a manifest list or image index. |
annotate | buildah-manifest-annotate(1) | Add or update information about an image or artifact in a manifest list or image index. |
create | buildah-manifest-create(1) | Create a manifest list or image index. |
exists | buildah-manifest-exists(1) | Check if a manifest list exists in local storage. |
inspect | buildah-manifest-inspect(1) | Display the contents of a manifest list or image index. |
push | buildah-manifest-push(1) | Push a manifest list or image index to a registry or other location. |
remove | buildah-manifest-remove(1) | Remove an image from a manifest list or image index. |
rm | buildah-manifest-rm(1) | Remove manifest list 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
$ buildah build --jobs=4 --platform=$platarch --manifest shazam .
Note: The --jobs
argument is optional, and the --manifest
option
should be used instead of the-t
or --tag
options.
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
$ buildah manifest create $REPO:latest
$ for IMGTAG in amd64 s390x ppc64le arm64; do \
buildah manifest add $REPO:latest docker:https://$REPO:IMGTAG; \
done
$ buildah 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 could
be performed like this:
$ buildah tag localhost/shazam example.com/example/shazam
$ buildah manifest rm localhost/shazam
$ buildah manifest push --all example.com/example/shazam
buildah(1), buildah-manifest-create(1), buildah-manifest-add(1), buildah-manifest-remove(1), buildah-manifest-annotate(1), buildah-manifest-inspect(1), buildah-manifest-push(1), buildah-manifest-rm(1)