From 2c116db861bfb5d73beb39b594dd676f1329f533 Mon Sep 17 00:00:00 2001 From: Steven Lasker Date: Fri, 23 Aug 2019 17:28:21 -0700 Subject: [PATCH 1/4] typo fixes Signed-off-by: Steven Lasker --- definitions-terms.md | 47 ++++++++++++++++++++++++++++++++++++++++++++ implementors.md | 10 ++++++++++ 2 files changed, 57 insertions(+) create mode 100644 definitions-terms.md create mode 100644 implementors.md diff --git a/definitions-terms.md b/definitions-terms.md new file mode 100644 index 0000000..5658b58 --- /dev/null +++ b/definitions-terms.md @@ -0,0 +1,47 @@ +# Definitions and Terms + +A collection of definitions and terms used within this repository. + +* [Artifact Author](#artifact-author) +* [Distribution Operator](#distribution-operator) +* [Media Type](#media-type) +* [OCI Image](#oci-image) +* [Registry](#registry) +* [YASS](#yass) + +## Artifact Author + +The owner of an artifact format. The [OCI Image Spec](https://github.com/opencontainers/image-spec/) is owned by the OCI working group. + +An artifact is defined to be unique by its `config.mediaType`. + +## Container Registry + +See [Registry](#registry) + + +## Distribution Operator + +Vendors that implement and/or run the [OCI Distribution Spec](https://github.com/opencontainers/distribution-spec/). + +## Media Type + +The uniqueness of an artifact is defined by its type. An artifact has a type, which has a collection of layers. + +The Artifact is defined as unique by its `manifest.config.mediaType`. Layers are defined by their `layer.config.mediaType`. + +## OCI Image + +OCI Image is a specific type of artifact. However, an OCI image is not meant to define all artifacts. Tooling, such as docker, containerD and vulnerability scanners that perform security checks upon container images, use the `config.mediaType` to know they can pull and instance container images. Docker and containerD are not intended to pull and instance Helm Charts, Singularity, OPA or other artifact types. + +## Registry + +A registry, or container registry, is an instance of the [distribution-spec]. See [Implementors][implementors] for a list of registries that support OCI Artifacts. + +## YASS + +[OCI Artifacts][artifacts] provides an alternative to having to build, distribute and run "**Y**et **A**nother **S**torage **S**ervice". + +[artifacts]: https://github.com/opencontainers/artifacts +[implementors]: https://github.com/SteveLasker/artifacts/blob/implementors/implementations.md +[distribution-spec]: https://github.com/opencontainers/distribution-spec/ diff --git a/implementors.md b/implementors.md new file mode 100644 index 0000000..22c955e --- /dev/null +++ b/implementors.md @@ -0,0 +1,10 @@ +# OCI Artifacts Implementations + +Projects or companies currently supporting OCI Artifacts + +* [Azure Container Registry](https://aka.ms/acr/artifacts) +* [docker/distribution](https://github.com/docker/distribution/) - the reference implementation of the [OCI Distribution Spec][distribution-spec] + +_(to add your project, please open a [pull-request](https://github.com/opencontainers/artifacts/pulls))_ + +[distribution-spec]: https://github.com/opencontainers/distribution-spec/ From e011ec5191ac682f24dd97e0f21ccac7dad85bd1 Mon Sep 17 00:00:00 2001 From: Steven Lasker Date: Fri, 23 Aug 2019 13:37:29 -0700 Subject: [PATCH 2/4] Add well-known types Signed-off-by: Steven Lasker --- definitions-terms.md | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 definitions-terms.md diff --git a/definitions-terms.md b/definitions-terms.md new file mode 100644 index 0000000..8db6267 --- /dev/null +++ b/definitions-terms.md @@ -0,0 +1,54 @@ +# Definitions and Terms + +A collection of definitions and terms used within this repository. + +* [Artifact Author](#artifact-author) +* [Distribution Operator](#distribution-operator) +* [Media Type](#media-type) +* [OCI Image](#oci-image) +* [Registry](#registry) +* [Well Known Type](#well-known-type) +* [YASS](#yass) + +## Artifact Author + +The owner of an artifact format. The [OCI Image Spec](https://github.com/opencontainers/image-spec/) is owned by the OCI working group. + +An artifact is defined to be unique by its `config.mediaType`. + +## Container Registry + +See [Registry](#registry) + +## Distribution Operator + +Vendors that implement and/or run the [OCI Distribution Spec](https://github.com/opencontainers/distribution-spec/). + +## Media Type + +The uniqueness of an artifact is defined by its type. An artifact has a type, which has a collection of layers. + +The Artifact is defined as unique by its `manifest.config.mediaType`. Layers are defined by their `layer.config.mediaType`. + +## OCI Image + +OCI Image is a specific type of artifact. However, an OCI image is not meant to define all artifacts. Tooling, such as docker, containerD and vulnerability scanners that perform security checks upon container images, use the `config.mediaType` to know they can pull and instance container images. Docker and containerD are not intended to pull and instance Helm Charts, Singularity, OPA or other artifact types. + +## Registry + +A registry, or container registry, is an instance of the [distribution-spec]. See [Implementors][implementors] for a list of registries that support OCI Artifacts. + +## Well Known Type + +Types that many to most registry operators would likely want to support ([OCI Image][image-spec], [Helm][helm], [Singularity][singularity]). While registry operators are not required to support all types, registry operators would likely want to support well known types, if there was an easy way to understand the differing types. OCI Artifacts includes publishing of well-known types for registry operators to import. + +## YASS + +[OCI Artifacts][artifacts] provides an alternative to having to build, distribute and run "**Y**et **A**nother **S**torage **S**ervice". + +[artifacts]: https://github.com/opencontainers/artifacts +[helm]: https://helm.sh +[implementors]: https://github.com/SteveLasker/artifacts/blob/implementors/implementations.md +[image-spec]: https://github.com/opencontainers/image-spec/ +[distribution-spec]: https://github.com/opencontainers/distribution-spec/ +[singularity]: https://github.com/sylabs/singularity \ No newline at end of file From d90276514c2c2f028ba5c77fd4ddcc38c8ed5ab8 Mon Sep 17 00:00:00 2001 From: Steven Lasker Date: Fri, 23 Aug 2019 12:56:17 -0700 Subject: [PATCH 3/4] Formating cleanup Signed-off-by: Steven Lasker --- README.md | 79 ++++++++++++++++++++++++++++++++------- definitions-terms.md | 47 +++++++++++++++++++++++ implementors.md | 10 +++++ media/artifact-layer.png | Bin 0 -> 9887 bytes media/manifest-layer.png | Bin 0 -> 2161 bytes media/registry-layer.png | Bin 0 -> 22189 bytes 6 files changed, 123 insertions(+), 13 deletions(-) create mode 100644 definitions-terms.md create mode 100644 implementors.md create mode 100644 media/artifact-layer.png create mode 100644 media/manifest-layer.png create mode 100644 media/registry-layer.png diff --git a/README.md b/README.md index 0be3b23..88e1780 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,22 @@ Container registries, implementing the [distribution-spec][distribution-spec], provide reliable, highly scalable, secured storage services for container images. Customers either use a cloud provider implementation, vendor implementations, or instance the open source implementation of [distribution][distribution]. They configure security and networking to assure the images in the registry are locked down and accessible by the resources required. Cloud providers and vendors often provide additional values atop their registry implementations from security to productivity features. -Applications and services typically require additional artifacts to deploy and manage, including [helm](https://helm.sh) for deployment and [Open Policy Agent (OPA)](https://github.com/open-policy-agent/opa/issues/1413) for policy enforcement. +Applications and services typically require additional artifacts to deploy and manage, including [helm](https://helm.sh) for deployment and [Open Policy Agent (OPA)](https://github.com/open-policy-agent/opa/issues/1413) for policy enforcement. -Utilizing the [manifest][image-manifest] and [index][image-index] definitions, new artifacts, such as the [Singularity project][singularity], can be stored and served using the [distribution-spec][distribution-spec]. +Utilizing the [manifest][image-manifest] and [index][image-index] definitions, new artifacts, such as the [Singularity project][singularity], can be stored and served using the [distribution-spec][distribution-spec]. This repository provides a reference for artifact authors and registry implementors for supporting new artifact types with the existing implementations of distribution. -By providing an OCI artifact definition, the community can continue to innovate, focusing on new artifact types without having to build yet another storage solution (YASS). +By providing an OCI artifact definition, the community can continue to innovate, focusing on new artifact types without having to build yet another storage solution ([YASS][def-yass]). -## Table of Contents +## OCI Artifact Table of Contents +* [Overview of Registry Content Delivery](#overview-of-registry-content-delivery) +* [Defining OCI Artifact Types](#defining-oci-artifact-types) +* [Definitions & Terms](definitions-terms.md) +* [OCI Artifact Implementations](implementors.md) + +## OCI Governance * [The Apache License, Version 2.0](LICENSE) * [Maintainers](MAINTAINERS) * [Maintainer guidelines](MAINTAINERS_GUIDE.md) @@ -19,6 +25,48 @@ By providing an OCI artifact definition, the community can continue to innovate, * [Project governance](GOVERNANCE.md) * [Release procedures](RELEASES.md) +## Overview of Registry Content Delivery + +Registry content delivery can be broken down into 3 distinct components: + +| | | +|-|:-:| +| [Registry](#registry) | | +| [Manifest Schemas](#manifest-schemas) | | +| [Artifacts](#artifacts) | | + +### Registry + +A registry, as an implementation of the [OCI Distribution Spec][distribution-spec], serves a few primary roles: + +* Persistence of content, stored as blobs +* Aggregation of blobs, defined by manifests +* A REST endpoint for content discovery +* Content delivery +* Authentication & authorization + +### Manifest Schemas + +For a registry to store collections of content, it must have well known schemas to uniquely describe each content addressable object. The [OCI Manifest][image-manifest] and [OCI Index][image-index] are two well known schemas that implementations of the [OCI Distribution Spec][distribution-spec] MUST support. + +While it's possible for registries to implement additional manifest schemas, the authors of the OCI manifest and index had the forethought of flexibility, enabling the majority of scenarios we know today. + +### Artifacts + +Artifacts, like docker and OCI images are well known types of artifacts. Using the same schemas and persistence, additional artifacts can be defined, persisted and served with OCI distribution spec compliant registries. + +OCI Artifacts generalizes registries from uniquely storing OCI Images, to generic means storing additional artifact types. + +## Defining OCI Artifact Types + +[Registries][def-registry], vulnerability scanners and artifact tooling must understand the types of artifacts they support. Registry scanning tools may only support a subset of artifact types, or they may need to apply different scanning methods based on the artifact type. + +If a security scanning solution were to scan all types, it would fail when it encounters unsupported types, representing false negatives. By differentiating types, a registry scanning solution can ignore unknown types, representing a known state. As new artifact types become [well known][def-well-known-types], scanners can expand the types they offer, providing a more complete known state. + +Artifact tooling must also know the types they support. The docker and containerD client know how to instance container images. However, they are not intended to instance Helm Charts or Singularity images. By defining the artifact type, registries can present the type to their users, and tools pulling artifacts from a registry can determine if they can support the specific type before encountering a runtime error. + +Artifacts are defined by setting the `manifest.config.mediaType` to a globally unique value. The `config.mediaType` of `application/vnd.oci.image.config.v1+json` is reserved for artifacts intended to be instanced by docker and [containerD][containerd]. + ## Code of Conduct This project incorporates (by reference) the OCI [Code of Conduct][code-of-conduct]. @@ -33,17 +81,22 @@ This project would continue to use existing channels in use by the [OCI develope ### Versioning / Roadmap -Artifacts will reference specific [distribution][distribution-spec], [index][image-index] and [manifest][image-manifest] versions in its examples, identifying any dependencies required. +Artifacts will reference specific [distribution][distribution-spec], [index][image-index] and [manifest][image-manifest] versions in its examples, identifying any dependencies required. ## Frequently Asked Questions (FAQ) **Q: Does this change the OCI Charter or Scope Table?** -A: No. Artifacts are a prescriptive means of storing [index][image-index] and [manifest][image-manifest] within [distribution][distribution-spec] implementations. - -[distribution-spec]: https://github.com/opencontainers/distribution-spec/ -[code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md -[image-manifest]: https://github.com/opencontainers/image-spec/blob/master/manifest.md -[image-index]: https://github.com/opencontainers/image-spec/blob/master/image-index.md -[distribution]: https://github.com/docker/distribution -[singularity]: https://github.com/sylabs/singularity \ No newline at end of file +A: No. Artifacts are a prescriptive means of storing [index][image-index] and [manifest][image-manifest] within [distribution][distribution-spec] implementations. + +[containerd]: https://containerd.io/ +[code-of-conduct]: CODE_OF_CONDUCT.md +[distribution]: https://github.com/docker/distribution +[distribution-spec]: https://github.com/opencontainers/distribution-spec/ +[def-registry]: definitions-terms.md#registry +[def-well-known-types]: definitions-terms.md#well-known-types +[def-yass]: definitions-terms.md#yass +[image-index]: https://github.com/opencontainers/image-spec/blob/master/image-index.md +[image-manifest]: https://github.com/opencontainers/image-spec/blob/master/manifest.md +[image-spec]: https://github.com/opencontainers/image-spec/ +[singularity]: https://github.com/sylabs/singularity diff --git a/definitions-terms.md b/definitions-terms.md new file mode 100644 index 0000000..5658b58 --- /dev/null +++ b/definitions-terms.md @@ -0,0 +1,47 @@ +# Definitions and Terms + +A collection of definitions and terms used within this repository. + +* [Artifact Author](#artifact-author) +* [Distribution Operator](#distribution-operator) +* [Media Type](#media-type) +* [OCI Image](#oci-image) +* [Registry](#registry) +* [YASS](#yass) + +## Artifact Author + +The owner of an artifact format. The [OCI Image Spec](https://github.com/opencontainers/image-spec/) is owned by the OCI working group. + +An artifact is defined to be unique by its `config.mediaType`. + +## Container Registry + +See [Registry](#registry) + + +## Distribution Operator + +Vendors that implement and/or run the [OCI Distribution Spec](https://github.com/opencontainers/distribution-spec/). + +## Media Type + +The uniqueness of an artifact is defined by its type. An artifact has a type, which has a collection of layers. + +The Artifact is defined as unique by its `manifest.config.mediaType`. Layers are defined by their `layer.config.mediaType`. + +## OCI Image + +OCI Image is a specific type of artifact. However, an OCI image is not meant to define all artifacts. Tooling, such as docker, containerD and vulnerability scanners that perform security checks upon container images, use the `config.mediaType` to know they can pull and instance container images. Docker and containerD are not intended to pull and instance Helm Charts, Singularity, OPA or other artifact types. + +## Registry + +A registry, or container registry, is an instance of the [distribution-spec]. See [Implementors][implementors] for a list of registries that support OCI Artifacts. + +## YASS + +[OCI Artifacts][artifacts] provides an alternative to having to build, distribute and run "**Y**et **A**nother **S**torage **S**ervice". + +[artifacts]: https://github.com/opencontainers/artifacts +[implementors]: https://github.com/SteveLasker/artifacts/blob/implementors/implementations.md +[distribution-spec]: https://github.com/opencontainers/distribution-spec/ diff --git a/implementors.md b/implementors.md new file mode 100644 index 0000000..22c955e --- /dev/null +++ b/implementors.md @@ -0,0 +1,10 @@ +# OCI Artifacts Implementations + +Projects or companies currently supporting OCI Artifacts + +* [Azure Container Registry](https://aka.ms/acr/artifacts) +* [docker/distribution](https://github.com/docker/distribution/) - the reference implementation of the [OCI Distribution Spec][distribution-spec] + +_(to add your project, please open a [pull-request](https://github.com/opencontainers/artifacts/pulls))_ + +[distribution-spec]: https://github.com/opencontainers/distribution-spec/ diff --git a/media/artifact-layer.png b/media/artifact-layer.png new file mode 100644 index 0000000000000000000000000000000000000000..38bbb4b377f8ad553ec7c50ef8021397dca9b57a GIT binary patch literal 9887 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 literal 0 HcmV?d00001 From c2e706cbea56ca7a4c4ed93ae5a763b33f8bc70e Mon Sep 17 00:00:00 2001 From: Steven Lasker Date: Wed, 28 Aug 2019 13:20:08 -0700 Subject: [PATCH 4/4] Removed implementors for now Signed-off-by: Steven Lasker --- README.md | 4 ++-- implementors.md | 10 ---------- 2 files changed, 2 insertions(+), 12 deletions(-) delete mode 100644 implementors.md diff --git a/README.md b/README.md index 88e1780..6acf637 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,14 @@ This repository provides a reference for artifact authors and registry implement By providing an OCI artifact definition, the community can continue to innovate, focusing on new artifact types without having to build yet another storage solution ([YASS][def-yass]). -## OCI Artifact Table of Contents +## Table of Contents * [Overview of Registry Content Delivery](#overview-of-registry-content-delivery) * [Defining OCI Artifact Types](#defining-oci-artifact-types) * [Definitions & Terms](definitions-terms.md) -* [OCI Artifact Implementations](implementors.md) ## OCI Governance + * [The Apache License, Version 2.0](LICENSE) * [Maintainers](MAINTAINERS) * [Maintainer guidelines](MAINTAINERS_GUIDE.md) diff --git a/implementors.md b/implementors.md deleted file mode 100644 index 22c955e..0000000 --- a/implementors.md +++ /dev/null @@ -1,10 +0,0 @@ -# OCI Artifacts Implementations - -Projects or companies currently supporting OCI Artifacts - -* [Azure Container Registry](https://aka.ms/acr/artifacts) -* [docker/distribution](https://github.com/docker/distribution/) - the reference implementation of the [OCI Distribution Spec][distribution-spec] - -_(to add your project, please open a [pull-request](https://github.com/opencontainers/artifacts/pulls))_ - -[distribution-spec]: https://github.com/opencontainers/distribution-spec/