-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support manifest lists / manifest-tool #2289
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: