{"action":"created","issue":{"url":"https://api.github.com/repos/docker/docker/issues/18785","labels_url":"https://api.github.com/repos/docker/docker/issues/18785/labels{/name}","comments_url":"https://api.github.com/repos/docker/docker/issues/18785/comments","events_url":"https://api.github.com/repos/docker/docker/issues/18785/events","html_url":"https://github.com/docker/docker/pull/18785","id":123050765,"number":18785,"title":"New image manifest format","user":{"login":"aaronlehmann","id":10601430,"avatar_url":"https://avatars.githubusercontent.com/u/10601430?v=3","gravatar_id":"","url":"https://api.github.com/users/aaronlehmann","html_url":"https://github.com/aaronlehmann","followers_url":"https://api.github.com/users/aaronlehmann/followers","following_url":"https://api.github.com/users/aaronlehmann/following{/other_user}","gists_url":"https://api.github.com/users/aaronlehmann/gists{/gist_id}","starred_url":"https://api.github.com/users/aaronlehmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aaronlehmann/subscriptions","organizations_url":"https://api.github.com/users/aaronlehmann/orgs","repos_url":"https://api.github.com/users/aaronlehmann/repos","events_url":"https://api.github.com/users/aaronlehmann/events{/privacy}","received_events_url":"https://api.github.com/users/aaronlehmann/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/docker/docker/labels/group/distribution","name":"group/distribution","color":"F6FBFF"},{"url":"https://api.github.com/repos/docker/docker/labels/status/2-code-review","name":"status/2-code-review","color":"fad8c7"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/docker/docker/milestones/44","html_url":"https://github.com/docker/docker/milestones/1.10.0","labels_url":"https://api.github.com/repos/docker/docker/milestones/44/labels","id":1351533,"number":44,"title":"1.10.0","description":"Code freeze / feature freeze January 14th 2016\r\nPlanned release: February 4th, 2016\r\nhttps://github.com/docker/docker/wiki","creator":{"login":"thaJeztah","id":1804568,"avatar_url":"https://avatars.githubusercontent.com/u/1804568?v=3","gravatar_id":"","url":"https://api.github.com/users/thaJeztah","html_url":"https://github.com/thaJeztah","followers_url":"https://api.github.com/users/thaJeztah/followers","following_url":"https://api.github.com/users/thaJeztah/following{/other_user}","gists_url":"https://api.github.com/users/thaJeztah/gists{/gist_id}","starred_url":"https://api.github.com/users/thaJeztah/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thaJeztah/subscriptions","organizations_url":"https://api.github.com/users/thaJeztah/orgs","repos_url":"https://api.github.com/users/thaJeztah/repos","events_url":"https://api.github.com/users/thaJeztah/events{/privacy}","received_events_url":"https://api.github.com/users/thaJeztah/received_events","type":"User","site_admin":false},"open_issues":36,"closed_issues":119,"state":"open","created_at":"2015-10-12T18:21:55Z","updated_at":"2016-01-09T00:56:57Z","due_on":"2016-01-13T23:00:00Z","closed_at":null},"comments":9,"created_at":"2015-12-19T01:04:13Z","updated_at":"2016-01-09T01:32:20Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/docker/docker/pulls/18785","html_url":"https://github.com/docker/docker/pull/18785","diff_url":"https://github.com/docker/docker/pull/18785.diff","patch_url":"https://github.com/docker/docker/pull/18785.patch"},"body":"This PR adds support for the new manifest format (\"schema2\") specified in https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md.\r\n\r\nThe new format allows end-to-end content addressability. The existing v2 manifest format puts image configurations in \"v1Compatibility\" strings that use the same data model and non-content-addressable ID scheme that the legacy v1 protocol uses. Supporting this format with the content addressable image/layer model in Docker 1.10 involves hacks to do things like generate fake v1 IDs. The new format carries the actual image configuration as a blob, so push/pull transfers an exact copy of the image.\r\n\r\nThe schema2 format also includes the concept of a \"manifest list\". This is a kind of meta-manifest that points to the appropriate manifests for different platforms. It will eventually allow pulling the same image name, tag, or digest across different platforms, and getting a version of the image built for the correct platform. The tools to create and push these manifest lists don't exist yet, but assuming this PR is merged for 1.10, 1.10 will support these multi-architecture images.\r\n\r\nThe transition to the new manifest format preserves backward compatibility. Engines which support the new format will always try to push schema2 manifests; however, if the remote registry doesn't support the format, it will fall back to using the schema1 format. When pulling, the engine indicates in an Accept header if it can accept the new format. If it can't, and it's pulling an image that the manifest has a schema2 manifest for, the registry will transparently convert the manifest to schema1 format (note this is not supported for pull-by-digest).\r\n\r\nOne nice side effect of this PR is that the hacks described above for assembling legacy manifests are moved out of the engine code into vendored distribution code. The distribution APIs now have a `ManifestBuilder` interface that abstracts away the job of creating a manifest in either the old or new format.\r\n\r\nSupport for the new format will be coming soon on Docker Hub. For now, testing push and pull with schema2 manifests requires building registry from the master branch of github.com/docker/distribution."},"comment":{"url":"https://api.github.com/repos/docker/docker/issues/comments/170176357","html_url":"https://github.com/docker/docker/pull/18785#issuecomment-170176357","issue_url":"https://api.github.com/repos/docker/docker/issues/18785","id":170176357,"user":{"login":"aaronlehmann","id":10601430,"avatar_url":"https://avatars.githubusercontent.com/u/10601430?v=3","gravatar_id":"","url":"https://api.github.com/users/aaronlehmann","html_url":"https://github.com/aaronlehmann","followers_url":"https://api.github.com/users/aaronlehmann/followers","following_url":"https://api.github.com/users/aaronlehmann/following{/other_user}","gists_url":"https://api.github.com/users/aaronlehmann/gists{/gist_id}","starred_url":"https://api.github.com/users/aaronlehmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aaronlehmann/subscriptions","organizations_url":"https://api.github.com/users/aaronlehmann/orgs","repos_url":"https://api.github.com/users/aaronlehmann/repos","events_url":"https://api.github.com/users/aaronlehmann/events{/privacy}","received_events_url":"https://api.github.com/users/aaronlehmann/received_events","type":"User","site_admin":false},"created_at":"2016-01-09T01:32:20Z","updated_at":"2016-01-09T01:32:20Z","body":"Rebased"}}