Enable Experimental Features.
Reference:
# build or pull images docker pull ${IMAGE_REPO}:${IMAGE_TAG}-${ARCH1} docker pull ${IMAGE_REPO}:${IMAGE_TAG}-${ARCH2} # create the manifest docker manifest create ${IMAGE_REPO}:${IMAGE_TAG} \ ${IMAGE_REPO}:${IMAGE_TAG}-${ARCH1} \ ${IMAGE_REPO}:${IMAGE_TAG}-${ARCH2} # annotate the manifest with os / architecture requirements # NOTE: this should not be necessary #docker manifest annotate ${IMAGE_REPO}:${IMAGE_TAG} \ # ${IMAGE_REPO}:${IMAGE_TAG}-${ARCH1} \ # --os linux --arch amd64 #docker manifest annotate ${IMAGE_REPO}:${IMAGE_TAG} \ # ${IMAGE_REPO}:${IMAGE_TAG}-${ARCH2} \ # --os linux --arch arm # inspect the manifest to check it's correct docker manifest inspect ${IMAGE_REPO}:${IMAGE_TAG} # push the manifest as :${IMAGE_TAG} docker manifest push ${IMAGE_REPO}:${IMAGE_TAG} # also push as :latest... mv ~/.docker/manifests/${IMAGE_REPO//\//_}-{${IMAGE_TAG},latest} docker manifest push --purge ${IMAGE_REPO}:latest
Note
There is currently no way to tag this manifest and re-use it, for example pushing both a v1
and latest
image. The whole process must be completed for each tag.
Tip
There is currently no way to remove a manifest via the CLI... but:
docker manifest push --purge
~/.docker/manifests/
docker run --rm -it ${IMAGE_REPO}:${IMAGE_TAG}