# How images/artifacts are stored ## Manifests ## Images Docker V2: https://docs.docker.com/registry/spec/manifest-v2-2/#media-types OCI Image: https://github.com/opencontainers/image-spec/blob/main/manifest.md ## Artifacts OCI Artifact: https://github.com/opencontainers/image-spec/blob/main/artifact.md ## Layers https://github.com/opencontainers/image-spec/blob/main/layer.md # Why types cannot be resolved based on media type ## Requirements Determine type of the artifact: Helm <- application/vnd.cncf.helm.chart.content.v1.tar+gzip <- application/vnd.docker.image.rootfs.diff.tar.gzip OCIArtifact <- application/vnd.oci.image.layer.v1.tar ArmTemplate <- application/vnd.oci.image.layer.v1.tar Question application/vnd.oci.image.layer.v1.tar: OCIArtifact or ArmTemplate? # Optimal solution: Use manifest annotation: https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys Exception: if media type is `application/vnd.docker.distribution.manifest.v2+json` or `application/vnd.docker.distribution.manifest.list.v2+json` => docker image Still need to check if annotating is supported for all user toolings: 1) oras supports annotation natively 2) docker supports specific annotation via LABEL: