推送 Docker manifest 多系统架构镜像文件的插件。
cnbcool/manifest:latest
main:
push:
# 示例1:镜像源为 `hub.docker.com`
# 下面的配置,会基于 `foo/bar:v1.0.0-linux-amd64` 和 `foo/bar:v1.0.0-linux-arm64`,两个镜像合并后生成 `foo/bar:v1.0.0`
- stages:
- name: manifest
image: cnbcool/manifest
settings:
# docker 用户名
username: docker-usernname
# docker 密码
password: docker-password
# 合并后生成的多系统架构镜像
target: foo/bar:v1.0.0
# 模板,用于生成多系统架构镜像名称,template 和 platforms 结合,得到用来生成多系统架构的原始镜像名称。
# 该例子中,原始镜像名称为:foo/bar:v1.0.0-linux-amd64 和 foo/bar:v1.0.0-linux-arm64,这两个镜像必须已经存在
template: foo/bar:v1.0.0-OS-ARCH
# 多系统架构
platforms:
- linux/amd64
- linux/arm64
# 是否跳过 TLS 证书验证,默认 false
skipVerify: false
# 忽略缺失的源镜像,即如果有源镜像缺失不报错,默认false
ignoreMissing: false
# 示例二:镜像源为 `docker.cnb.cool`,无需传用户名密码,插件中会默认使用环境变量中的用户名和密码
# 下面的配置,会基于 `docker.cnb.cool/foo/bar:v1.0.0-linux-amd64` 和 `docker.cnb.cool/foo/bar:v1.0.0-linux-arm64`,
# 两个镜像合并后生成 `docker.cnb.cool/foo/bar:v1.0.0`
- stages:
- name: manifest
image: cnbcool/manifest
settings:
# 合并后生成的多系统架构镜像
target: docker.cnb.cool/foo/bar:v1.0.0
# 模板,用于生成多系统架构镜像名称,template 和 platforms 结合,得到用来生成多系统架构的原始镜像名称
# 该例子中,原始镜像名称为:docker.cnb.cool/foo/bar:v1.0.0-linux-amd64 和 docker.cnb.cool/foo/bar:v1.0.0-linux-arm64,这两个镜像必须已经存在
template: docker.cnb.cool/foo/bar:v1.0.0-OS-ARCH
# 多系统架构
platforms:
- linux/amd64
- linux/arm64
# 是否跳过 TLS 证书验证,默认 false
skipVerify: false
# 忽略缺失的源镜像,即如果有源镜像缺失不报错,默认false
ignoreMissing: false
# 示例3:镜像源为 `hub.docker.com`,同时生成多个目标多系统架构镜像
# 下面的配置,会基于 `foo/bar:v1.0.0-linux-amd64` 和 `foo/bar:v1.0.0-linux-arm64` 两个镜像合并后,
# 生成 `foo/bar:v1.0.0` 和 `foo/bar:latest` 两个版本的镜像,但实际这两个版本只想同一个镜像
- stages:
- name: manifest
image: cnbcool/manifest
settings:
# docker 用户名
username: docker-usernname
# docker 密码
password: docker-password
# 合并后生成的多系统架构镜像,支持同时生成多个,用英文逗号分隔,例如 foo/bar:v1.0.0,foo/bar:latest
target:
- foo/bar:v1.0.0
- foo/bar:latest
# 模板,用于生成多系统架构镜像名称,template 和 platforms 结合,得到用来生成多系统架构的原始镜像名称
# 该例子中,原始镜像名称为:foo/bar:v1.0.0-linux-amd64 和 foo/bar:v1.0.0-linux-arm64,这两个镜像必须已经存在
template: foo/bar:v1.0.0-OS-ARCH
# 多系统架构
platforms:
- linux/amd64
- linux/arm64
# 是否跳过 TLS 证书验证,默认 false
skipVerify: false
# 忽略缺失的源镜像,即如果有源镜像缺失不报错,默认false
ignoreMissing: false
通过上面的配置,可以在 DockerHub 给 foo/bar 打上 v1.0.0 标签,并且 v1.0.0 跟 DockerHub 上这两个标签的镜像关联,注意,DockerHub 上以下两个镜像标签必须存在,即已经推送过:
执行 docker pull foo/bar:v1.0.0 时会基于运行环境的系统架构,拉取对应的镜像。
username: 非必填,docker 认证用户名,当 target 镜像源为 CNB 制品库时,默认使用环境变量 CNB_TOKEN_USER_NAME。password: 非必填,docker 认证密码,当 target 镜像源为 CNB 制品库时,默认使用环境变量 CNB_TOKEN。skipVerify: 非必填,true 或 false,默认 false,是否跳过 TLS 证书验证。target: 必填,目标镜像名称(合并后的 manifest 会推送到这个镜像名)。imagename:tag(imagename 替换为镜像名,tag 替换为标签名)格式。支持多个,用英文逗号分隔。例如:foo/bar:v1.0.0 或 foo/bar:latest,foo/bar:v1.0.0foo/bar:v1.0.0-OS-ARCH(可将 foo/bar 和 v1.0.0 替换成自己的镜像名和版本号)platforms: 必填,多系统架构列表,多个用分号分隔或以上述示例中的数组形式传入。格式为 OS/ARCH(系统/架构) 的系统架构列表,它会基于 template 模板生成 target 要关联的镜像列表。例如:linux/amd64,linux/arm64。true 或 false,默认 false,是否忽略缺失的源镜像,即需要合并的多系统架构的镜像如果缺失不报错,上述示例中 foo/bar:v1.0.0-linux-arm64 和 foo/bar:v1.0.0-linux-amd64 两个镜像的其中任何一个缺失,不会报错。但如果都缺失仍然会报错。