文章目录
大家好,我是温玉。今天给大家分享的内容是 “多架构镜像构建” 专题,希望给有在不同架构平台上交付应用需求的同学提供一些帮助。
多架构镜像(multi-architecture)
在企业实际业务容器化过程中会遇到同一个服务构建的镜像需要运行在不同的 CPU 架构服务器上,比较常遇到的是 ARM 架构(如 arm64/v8)和 X86 架构(amd64)。对于一个服务组件构建两个及以上的镜像 TAG 是非常不便于管理的,这这种情况下使用多架构镜像是非常不错的选择。
多架构镜像允许某个服务镜像使用一个名称关联多个不同架构功能相同的镜像。即一个镜像 TAG 中可以同时包含不同 CPU 架构、操作系统信息。在实际 docker pull
时,docker 能够自动根据当前运行的机器环境下载相关的镜像 Overlay 等数据。
在 Docker 中的镜像是由 overlay 层、大小和摘要等信息组成,这些信息统称为清单(manifest),即一个镜像的完整说明。而多架构镜像是同一个服务不同环境下的 overlay 层、大小和摘要组合而成,因此多架构镜像也称为清单列表(manifest lists)。
一般情况下 Docker 提供多架构镜像的管理方法有两种 docker manifest
和 docker buildx
,本次主要讨论 docker manifest
方法。
示例提供一种场景,将 redis 的 arm64 和 amd64 镜像同步到私有镜像仓库。
准备不同架构的镜像
在下载镜像时,默认 docker 会根据当前的操作系统来自动判断下载什么架构的镜像。但,本次想下载多个架构的镜像就需要使用到 docker pull --platform
命令和参数。
由于同一个镜像 TAG 在不是多架构镜像时,是不能同时保存多架构镜像相关信息的,因此在下载一个架构的镜像后,需要修改他的 TAG 便于下载其他架构的镜像。
下载 arm64 架构的 redis 镜像,并修改 tag
# docker pull --platform arm64 redis:6.2.6
# docker tag redis:6.2.6 harbor.cncfstack.com/library/redis:6.2.6-arm64