Skip to content

[Proposal]: Add support to create and push manifest lists #24739

@luxas

Description

@luxas

Hi,
I'm a Kubernetes maintainer, and works mostly on multiarch and deployment things.
I'm writing a proposal for multi-arch Kubernetes here: kubernetes/kubernetes#26863, and part of the conclusion there is that manifest lists are a perfect fit for Kubernetes.
Now we're trying to dramatically remove cluster deployment complexity, and as a part of that, I think it would be great to try to remove the image naming hack. (Now we're using registry/binary-arch:version as the image naming convention, which does its job, but a manifest list would be better)

I know @estesp has a tool for this, and if nothing else comes out of this, we probably have to use that.
But it would be great if we could get a manifest command to docker.

Anyway, I do not imagine this as a "easy to fix"-thing; rather something that's quite a big change, so therefore we probably need an assignee from the Docker team, and Docker have to stand behind the things proposed, otherwise we shouldn't do this right now.

In fact, the tasks that are yet to be done are well-documented here already: https://integratedcode.us/2016/04/22/a-step-towards-multi-platform-docker-images/ (thanks!)

Example how the manifest command could work (very rough, appreciating discussion):

$ docker manifests
ID          NAME                     IMAGE                  (IMAGE ID)     OS         ARCH       VARIANT
{sha}       luxas/debian:jessie      debian:jessie          {debian sha}   linux      amd64      N/A
                                     armhf/debian:jessie    {sha }         linux      arm        GOARM=7
                                     aarch64/debian:jessie  {sha }         linux      arm64      N/A
$ docker manifests append luxas/debian:jessie ppc64le/debian:jessie --os linux --arch ppc64le
$ docker manifests
ID          NAME                     IMAGE                  (IMAGE ID)     OS         ARCH       VARIANT
{sha}       luxas/debian:jessie      debian:jessie          {debian sha}   linux      amd64      N/A
                                     armhf/debian:jessie    {sha }         linux      arm        GOARM=7
                                     aarch64/debian:jessie  {sha }         linux      arm64      N/A
                                     ppc64le/debian:jessie  {sha }         linux      ppc64le    N/A
$ docker images
REPOSITORY             TAG           IMAGE ID            CREATED             SIZE
?luxas/debian           jessie        {sha}
...
$ docker push luxas/debian:jessie

Open questions:

  • Should we show the manifest list at all in docker images?
  • Should the manifest list be considered an "image" or just a placeholder for an image?
  • Should it be possible to docker build --os x --arch y --variant z -t {manifest name} .?
  • How should we display that a manifest list was downloaded, but not all images for all platform in it?
  • Can we add content addressability to a manifest list?
  • etc....

Related: #22816 #22106 distribution/distribution#200

@tianon @estesp @jfrazelle @cpuguy83 @calavera @icecrime @jstarks @mikedanese @thockin @vishh @david-mcmahon @stevvooe @paralin
Note: These are my personal ideas and might not represent the rest of the Kubernetes team

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/distributionImage Distributionkind/featureFunctionality or other elements that the project doesn't currently have. Features are new and shiny

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions