使用 docker manifest 构建多平台镜像
介绍
Docker manifest 是一个非常有用的工具,可以帮助你管理多架构镜像和多标签镜像。Docker Manifest 是 Docker 引入的一种机制,用于管理针对不同架构(如 amd64、arm64)或不同操作系统(如 Linux、Windows)构建的多个镜像。通过 Manifest,我们可以将这些镜像聚合在一起,形成一个统一的镜像引用,方便我们在不同环境中部署应用。
Docker Manifest 的优势
- 统一镜像引用: 使用一个统一的镜像名,就可以拉取适用于不同平台的镜像,简化了镜像管理。
- 自动化选择: Docker 自动根据运行环境选择合适的镜像,减少了手动操作。
- 提高部署效率: 减少了镜像构建和分发的次数,提高了部署效率。
- 简化镜像维护: 可以对多个镜像进行统一管理和更新。
Docker Manifest 的常见使用场景
- 多架构支持: 为不同的 CPU 架构(如 x86_64、arm64)构建镜像,并使用 Manifest 进行统一管理。
- 多操作系统支持: 为不同的操作系统(如 Linux、Windows)构建镜像,并使用 Manifest 进行统一管理。
- 多版本支持: 为同一个应用构建多个版本镜像,并使用 Manifest 进行管理。
使用 manifest 合并多平台镜像
查看是否开启 experimental 功能
--platform
参数需要 experimental
为 true
,通过下面的命令可以验证是否开启:
docker info | grep -i 'experimental'
开启experimental 功能配置:
参考:https://199604.com/2865
准备多平台镜像
首先,你需要为不同平台构建镜像。
可以使用 docker buildx
工具来构建这些镜像。例如:
也可以使用直接docker push
拉取不同平台镜像
创建 Manifes
使用 docker manifest create
命令创建一个新的 manifest,并将多个平台的镜像添加到该 manifest 中:
推送 Manifes
将创建的 manifest 推送到镜像仓库
manifest 功能介绍
docker manifest
不止有 create
一个子命令,可以通过 --help/-h
参数查看使用帮助:
docker manifest
共提供了annotate
、create
、inspect
、push
、rm
这 5 个子命。
create
create
子命令支持两个可选参数-a/--amend
用来修订已存在的多架构镜像。
--insecure
参数则允许使用不安全的(非 https)镜像仓库。
push
使用 push
可以将多架构镜像推送到镜像仓库。
--insecure
参数允许使用不安全的(非 https)镜像仓库。
-p/--purge
选项的作用是推送本地镜像到远程仓库后,删除本地manifest list
。
inspect
inspect
用来查看 manifest
/manifest list
所包含的镜像信息。
--insecure
参数允许使用不安全的(非 https)镜像仓库。
-v/--verbose
参数可以输出更多信息,包括镜像的layers
和platform
信息。
annotate
annotate
子命令可以给一个本地镜像 manifest
添加附加的信息。
可选参数列表如下:
选项 | 描述 |
---|---|
–arch | 设置 CPU 架构信息。 |
–os | 设置操作系统信息。 |
–os-features | 设置操作系统功能信息。 |
–os-version | 设置操作系统版本信息。 |
–variant | 设置 CPU 架构的 variant 信息(翻译过来是“变种”的意思),如 ARM 架构的 v7、v8 等。 |
示例
rm
使用 rm
可以删除本地一个或多个多架构镜像(manifest lists
)。
最后是一个合并的shell
manifest-images.sh
观摩学习