-
Notifications
You must be signed in to change notification settings - Fork 187
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
spec: Multi-arch image management with ORAS #1514
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #1514 +/- ##
==========================================
+ Coverage 84.35% 84.39% +0.03%
==========================================
Files 123 123
Lines 5638 5638
==========================================
+ Hits 4756 4758 +2
+ Misses 627 625 -2
Partials 255 255 ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To make the spec more professional, please proofread the spec and fix formatting issues.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM but you need to fix the check failure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thank you for drawing my attention to this, @FeynmanZhou ! 🙏
some very optional comments below, I hope these helps!
71c2d12
to
909bb3f
Compare
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: feynmanzhou <[email protected]>
Signed-off-by: feynmanzhou <[email protected]>
Signed-off-by: feynmanzhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
Signed-off-by: Feynman Zhou <[email protected]>
909bb3f
to
64b200a
Compare
|
||
#### Create a multi-arch image from a registry only | ||
|
||
Create a multi-arch image using two arch-specific images stored in a registry only, tag it with `v1` and push the tagged image index to an OCI image layout `layout-dir` automatically. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The result image index should be pushed to the localhost registry as well.
Create a multi-arch image using two arch-specific images stored in a registry only, tag it with `v1` and push the tagged image index to an OCI image layout `layout-dir` automatically. | ||
|
||
```console | ||
$ oras manifest index create localhost:5000/v1-linux-arm64 localhost:5000/v1-linux-arm64 --oci-layout layout-dir:v1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
$ oras manifest index create localhost:5000/v1-linux-arm64 localhost:5000/v1-linux-arm64 --oci-layout layout-dir:v1 | |
$ oras manifest index create localhost:5000/example:v1 v1-linux-arm64 v1-linux-arm64 |
2. Create a multi-arch image by combining two image manifests into an image index, tag it with `v1` and push the tagged image index to an OCI image layout `layout-dir` automatically. Add annotations to this image index at the same time: | ||
|
||
```console | ||
$ oras manifest index create v1-linux-amd64 v1-linux-arm64 --annotation "com.example.key=value" --oci-layout layout-dir:v1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
$ oras manifest index create v1-linux-amd64 v1-linux-arm64 --annotation "com.example.key=value" --oci-layout layout-dir:v1 | |
$ oras manifest index create --oci-layout layout-dir:v1 v1-linux-amd64 v1-linux-arm64 --annotation "com.example.key=value" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The index to created must be in the first argument
Fetching v1-linux-amd64 | ||
Fetched sha256:42c524c48e0672568dbd2842d3a0cb34a415347145ee9fe1c8abaf65e7455b46 v1-linux-amd64 | ||
Fetching v1-linux-arm64 | ||
Fetched sha256:965945e1a08031a63d5970c1da7c39af231c36e4c0a5a3cc276d02a3e06513ee v1-linux-arm64 | ||
Packed edb5bc1f0b5c application/vnd.oci.image.index.v1+json | ||
Pushed [oci-layout] layout-dir:v1 | ||
Digest: sha256:edb5bc1f0b5c21e9321b34e50c92beae739250fb88409056e8719d9759f6b5b4 | ||
|
||
Status: An image index has been created and pushed to layout-dir:v1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to fix the output as well
Update the image index by adding a new architecture from a registry in the OCI image layout: | ||
|
||
```console | ||
$ oras manifest index update --add localhost:5000/v1-linux-arm64 --oci-layout layout-dir:v1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
$ oras manifest index update --add localhost:5000/v1-linux-arm64 --oci-layout layout-dir:v1 | |
$ oras manifest index update --oci-layout layout-dir:v1 --add v1-linux-arm64 |
|
||
#### Update an existing multi-Arch image | ||
|
||
Update the image index by adding a new architecture from a registry in the OCI image layout: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The source and the target must be either a registry or an OCI image layout
### Create a multi-arch image | ||
|
||
```bash | ||
# Create an index from source manifests tagged 'linux-amd64' and 'linux-arm64', and push without tagging: | ||
oras manifest index create localhost:5000/hello linux-amd64 linux-arm64 | ||
|
||
# Create an index from source manifests tagged 'linux-amd64' and 'linux-arm64', and push with the tag 'v1': | ||
oras manifest index create localhost:5000/hello:v1 linux-amd64 linux-arm64 | ||
|
||
# Create an index from source manifests using both tags and digests, and push with tag 'v1': | ||
oras manifest index create localhost:5000/hello:v1 linux-amd64 sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 | ||
|
||
# Create an index and push it with multiple tags: | ||
oras manifest index create localhost:5000/hello:tag1,tag2,tag3 linux-amd64 linux-arm64 sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 | ||
|
||
# Create and push an index with annotations: | ||
oras manifest index create localhost:5000/hello:v1 linux-amd64 --annotation "key=val" | ||
|
||
# Create an index and push to an OCI image layout folder 'layout-dir' and tag with 'v1': | ||
oras manifest index create layout-dir:v1 linux-amd64 sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 | ||
|
||
# Create an index and save it locally to index.json, auto push will be disabled: | ||
oras manifest index create --output index.json localhost:5000/hello linux-amd64 linux-arm64 | ||
|
||
# Create an index and output the index to stdout, auto push will be disabled: | ||
oras manifest index create localhost:5000/hello linux-arm64 --output - --pretty | ||
|
||
``` | ||
|
||
### Update a multi-arch image | ||
|
||
```bash | ||
# Remove a manifest and add two manifests from an index tagged 'v1'. The tag will point to the updated index: | ||
oras manifest index update localhost:5000/hello:v1 --add linux-amd64 --add linux-arm64 --remove sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 | ||
|
||
# Create a new index by updating an existing index specified by its digest: | ||
oras manifest index update localhost:5000/hello@sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 --add linux-amd64 --remove sha256:fd6ed2f36b5465244d5dc86cb4e7df0ab8a9d24adc57825099f522fe009a22bb | ||
|
||
# Merge manifests from the index 'v2-windows' to the index 'v2': | ||
oras manifest index update localhost:5000/hello:v2 --merge v2-windows | ||
|
||
# Update an index and tag the updated index as 'v2.1.0' and 'v2': | ||
oras manifest index update localhost:5000/hello@sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 --add linux-amd64 --tag "v2.1.0" --tag "v2" | ||
|
||
# Update an index and save it locally to index.json, auto push will be disabled: | ||
oras manifest index update --output index.json localhost:5000/hello:v2 --add v2-linux-amd64 | ||
|
||
# Update an index and output the index to stdout, auto push will be disabled: | ||
oras manifest index update --output - --pretty localhost:5000/hello:v2 --remove sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wondering if the detailed command examples are really necessary in the spec?
oras manifest index create localhost:5000/hello:v1 linux-amd64 --annotation "key=val" | ||
|
||
# Create an index and push to an OCI image layout folder 'layout-dir' and tag with 'v1': | ||
oras manifest index create layout-dir:v1 linux-amd64 sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oras manifest index create layout-dir:v1 linux-amd64 sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 | |
oras manifest index create --oci-layout layout-dir:v1 linux-amd64 sha256:99e4703fbf30916f549cd6bfa9cdbab614b5392fbe64fdee971359a77073cdf9 |
BTW, we have fixed this example in main branch
What this PR does / why we need it:
Add a spec: Multi-arch image management with ORAS
Which issue(s) this PR fixes (optional, in
fixes #<issue number>(, fixes #<issue_number>, ...)
format, will close the issue(s) when PR gets merged):Fixes #1053
Preview: https://github.com/FeynmanZhou/oras/blob/multi-arch/docs/proposals/multi-arch-image-mgmt.md