spec/manifest: clarify relationship between urls and foreign layers

Previously, the specificiation incorrectly bound the fates of `urls` and
foreign layers. These are complementary but unrelated features, in that
the `urls` field may be populated for layers that aren't foreign. The
type of the layer only dictates the push behavior of the layer, rather
than involving where it came from.

For example, one may pull a foreign layer from a registry, but they may
not push it back to another registry. Conversely, a layer that has no
restrictions on push/pull behavior may be fetched via `urls` entries.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
Stephen J Day 2016-08-29 17:12:01 -07:00
parent b1b100cf01
commit 6bcdb38b92
No known key found for this signature in database
GPG key ID: FB5F6B2905D7ECF3

View file

@ -31,8 +31,9 @@ the resources they reference:
- `application/vnd.docker.distribution.manifest.v1+json`: schema1 (existing manifest format) - `application/vnd.docker.distribution.manifest.v1+json`: schema1 (existing manifest format)
- `application/vnd.docker.distribution.manifest.v2+json`: New image manifest format (schemaVersion = 2) - `application/vnd.docker.distribution.manifest.v2+json`: New image manifest format (schemaVersion = 2)
- `application/vnd.docker.distribution.manifest.list.v2+json`: Manifest list, aka "fat manifest" - `application/vnd.docker.distribution.manifest.list.v2+json`: Manifest list, aka "fat manifest"
- `application/vnd.docker.image.rootfs.diff.tar.gzip`: "Layer", as a gzipped tar
- `application/vnd.docker.container.image.v1+json`: Container config JSON - `application/vnd.docker.container.image.v1+json`: Container config JSON
- `application/vnd.docker.image.rootfs.diff.tar.gzip`: "Layer", as a gzipped tar
- `application/vnd.docker.image.rootfs.foreign.diff.tar.gzip`: "Layer", as a gzipped tar that should never be pushed
## Manifest List ## Manifest List
@ -203,6 +204,9 @@ image. It's the direct replacement for the schema-1 manifest.
The MIME type of the referenced object. This should The MIME type of the referenced object. This should
generally be `application/vnd.docker.image.rootfs.diff.tar.gzip`. generally be `application/vnd.docker.image.rootfs.diff.tar.gzip`.
Layers of type
`application/vnd.docker.image.rootfs.foreign.diff.tar.gzip` may be
pulled from a remote location but they should never be pushed.
- **`size`** *int* - **`size`** *int*
@ -218,11 +222,9 @@ image. It's the direct replacement for the schema-1 manifest.
- **`urls`** *array* - **`urls`** *array*
For an ordinary layer, this is empty, and the layer contents can be Provides a list of URLs from which the content may be fetched. Content
retrieved directly from the registry. For a layer with *`mediatype`* of should be verified against the `digest` and `size`. This field is
`application/vnd.docker.image.rootfs.foreign.diff.tar.gzip`, this optional and uncommon.
contains a non-empty list of URLs from which this object can be
downloaded.
## Example Image Manifest ## Example Image Manifest