1. docker buildx imagetools create
基于原镜像创建一个新的镜像。
基于已经存在的 manifests (镜像)来创建一个新的 manifest list。
在新镜像创建时,源镜像可以是单个平台的镜像,也可以是多平台的镜像,但是必须在 registry 中已经存在。
如果只有一个源镜像,那创建的过程就是复制的过程。
1.1. 帮助
# docker buildx imagetools create --help
Usage: docker buildx imagetools create [OPTIONS] [SOURCE] [SOURCE...]
Create a new image based on source images
Options:
--append Append to existing manifest
--builder string Override the configured builder instance
--dry-run Show final image instead of pushing
-f, --file stringArray Read source descriptor from file
-t, --tag stringArray Set reference for new image
1.2. 选项
Name | Type | Default | Description |
---|---|---|---|
[`--append`](#append) | 追加一个已经存在的 manifest | ||
[`--builder`](#builder) | `string` | 操作一个明确的 builder 示例 | |
[`--dry-run`](#dry-run) | 显示最终镜像而不是将其 push 到远程仓库 | ||
[`-f`](#file), [`--file`](#file) | `stringArray` | 从文件中读取描述符对象(oci 的 json 文件) | |
[`-t`](#tag), [`--tag`](#tag) | `stringArray` | 给新镜像设置关联 tag |
1.3. 示例
1.3.1. 追加一个已经存在的 manifest (--append)
Use the --append
flag to append the new sources to an existing manifest list
in the destination.
使用 --append
标记可以在一个已经存在的目的 manifest list 中继续添加新的 manifest 。
例如,可以在已经支持 amd64 和 x86 的多架构镜像中继续添加 arm64 平台的镜像层。
1.3.2. 显示最终镜像而不是将其 push 到远程仓库 (--dry-run)
使用 --dry-run
标记只是查看最终的结果,而不是将结果 push 同步到远程 registry 中。
1.3.3. 从文件中读取 (-f, --file)
-f FILE or --file FILE
从文件中读取源数据。一个源数据可以是 manifest digest, manifest reference 或者符合 OCI 的 JSON 资源对象。
为了添加例如 os.version
和 os.features
等额外的属性配置或注释,你需要将它们添加到 JSON 编码的 OCI 描述符对象中。
$ docker buildx imagetools inspect --raw alpine | jq '.manifests[0] | .platform."os.version"="10.1"' > descr.json
$ docker buildx imagetools create -f descr.json myuser/image
如果 registry 中已经存在了一个同样的描述符文件,那么这个描述符对象文件会和 register 中的合并。
描述符支持的字段查看 OCI spec .
1.3.4. 给新镜像设置关联 tag (-t, --tag)
-t IMAGE or --tag IMAGE
使用 -t
或 --tag
标记给新创建的镜像设置一个名称。
$ docker buildx imagetools create --dry-run alpine@sha256:5c40b3c27b9f13c873fefb2139765c56ce97fd50230f1f2d5c91e55dec171907 sha256:c4ba6347b0e4258ce6a6de2401619316f982b7bcc529f73d2a410d0097730204
$ docker buildx imagetools create -t tonistiigi/myapp -f image1 -f image2