-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Support manifest lists / manifest-tool #2289
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Comments
@tianon thanks for getting this started. Note that tags are not actually redirecting - the manifest list is served to the engine on I think it's probably fine to still have |
Right, I don't mean that they redirect per-se, but we do have to push something somewhere first in order to include it in a manifest list (and can't push the full list until all the relevant artifacts it needs to reference are pushed), so pushing becomes a bit complex. Sorry for not being more clear on that point. 😇 |
I haven't used the manifest-tool yet. But without knowing all the details I would like to have an easy "the best tools go out of your way" style approach for multi os/architecture:
And I'm done. My build agents does not depend on each other or have to be called in a specific order. |
@StefanScherer yeah, I guess by delaying, I was kinda hoping Docker would grow support in |
Here's an initial teaser of integrating docker-library/go-dockerlibrary#2, at least for generating the doc block I outlined in docker-library/go-dockerlibrary#2 (comment): $ bashbrew cat hello-manifest
Maintainers: Tianon Gravi <admwiggin@gmail.com> (@tianon), Joseph Ferguson <yosifkit@gmail.com> (@yosifkit)
GitRepo: https://github.com/docker-library/hello-world.git
Tags: 7.6-linux, 7-linux, linux
SharedTags: 7.6, 7, latest
GitCommit: bdee60d7ff6b98037657dc34a10e9ca4ffd6785f
Directory: hello-world
Tags: 7.7-nanoserver, 7-nanoserver, nanoserver
SharedTags: 7.7, 7, latest
GitCommit: 1f13a5bc3b787747eeefb3b0051d8d29f851260d
Directory: hello-world/nanoserver
Constraints: nanoserver $ bashbrew cat --format '{{ range .Manifest.GetSharedTagGroups }}- `{{ .SharedTags | join "`, `" }}`:{{ "\n" }}{{ range .Entries }} - `{{ .Tags | first }}`{{ "\n" }}{{ end }}{{ end }}' hello-manifest
- `7.6`:
- `7.6-linux`
- `7`, `latest`:
- `7.6-linux`
- `7.7-nanoserver`
- `7.7`:
- `7.7-nanoserver` |
This has been a little bit side-tracked by officializing the multi-architecture work (which is definitely highly related): docker-library/go-dockerlibrary#10 😇 |
Filed #3009 to start bringing some bits of this together -- there's a stub in there for where we plan to implement manifest lists, but for now we wanted to get at least this much in so we can start moving from https://github.com/docker-library/oi-janky-groovy/blob/2c031cae0bd68ed7679e952c7aeffeb7cb081044/multiarch/vars.groovy as the source-of-truth for our current multiarchitecture support to the image manifest files themselves being the source-of-truth, as they should be (and as they are for the rest of what we do). 👍 |
See https://hub.docker.com/u/trollin/ for where I've temporarily been pushing manifest-list-ified versions of the official images. 👍 |
@tianon - is there a straightforward way to inspect the Docker hub to see what architectures these sample images point to? |
@vielmetti the best I've seen so far is |
@vielmetti another way is to use curl + jq if you just want to see the os/arch pairs: |
@tianon what about extending trollin/golang (and others where applicable) for windows/amd64 with nanoserver as the default? 😄 |
Updated the OP checklist with a bit of news! The signing system is now updated to handle manifest lists appropriately, and we've applied a minor patch to our builds of We're really close to finally supporting this properly! 🤘 👍 🎂 |
So it begins: docker-library/oi-janky-groovy@477c8aa As long as all goes well, we should be able to finally close this issue very shortly! |
This is pretty much done now! Just a few stragglers left. Success! root@rpi3:~# docker run -it --rm debian:jessie-slim dpkg --print-architecture
Unable to find image 'debian:jessie-slim' locally
jessie-slim: Pulling from library/debian
01c8fcecd171: Pull complete
Digest: sha256:01f3ae3155dcdd3c86470cbcb81b1215dff357329e6750b1b4cf663e3c00a099
Status: Downloaded newer image for debian:jessie-slim
arm64 |
@tianon wait, so this is rolled out to all the library images? |
@friism yessir! There are a few still in queue (which still includes |
@tianon including windoze? |
@friism well, we're not using |
ah, got it - really looking forward to |
hurray..! @friism
|
@tianon congrats! |
Ideally we'd like to start experimenting with manifest lists (likely using Phil's tool; https://github.com/estesp/manifest-tool), initially for allowing for
latest
and other similar tags to redirect to either Linux or Windows based images automatically as appropriate, but eventually for multi-architecture support as well.I'm filing this issue so we can discuss obstacles and work on overcoming them. 😄
library
file changesbashbrew
changes (new subcommand for assembling and pushing manifest list objects)manifest-tool
bug pushing tolibrary/
(Build manifest-tool from source to apply a minor patch #3437)amd64
(https://github.com/docker-library/oi-janky-groovy/blob/7516f1609f1260f94e70192238c588bfb4f8a88b/multiarch/vars.groovy#L4)The text was updated successfully, but these errors were encountered: