苏打

制作支持多架构容器镜像

2019-11-18 · 2 min read
manifest tool

制作多架构docker镜像的利器:manifest-tool

manifest-tool

目前许多容器镜像都只支持 amd64 架构,但是国产服务器基本上用的都是 arm 架构,想要在arm服务器上部署运行容器,需要额外制作支持arm架构的容器镜像,并用对应的镜像tag标示, 比如 nginx:arm64 支持arm64架构,nginx:amd64 支持amd64架构。传统做法导致每次拉取镜像都需要明确指定镜像版本,无法便捷的做到自动化,这个问题可以使用 manifest-tool 工具来解决。

制作镜像

需要先制作 someimage:amd64someimage:arm64 镜像,并推送到镜像仓库,然后编写如下配置文件 someimage.yaml

image: someimage:latest
manifests:
  -
    image: someimage:amd64
    platform:
      architecture: amd64
      os: linux
  -
    image: someimage:arm64
    platform:
      architecture: arm64
      os: linux

定义好以上文件后, 执行如下命令, manifest-tool会基于 someimage:amd64someimage:arm64 创建一个新的镜像 someimage:latest 并 push 到镜像仓库。

./manifest-tool push from-spec someimage.yaml

也可以使用命令行参数创建

./manifest-tool push from-args \
    --platforms linux/amd64,linux/arm64 \
    --template someimage:ARCH \
    --target someimage:latest

platforms: 指定要支持的架构平台,格式 OS/ARCH
template: 指定基于的镜像源,ARCH 会依据 platforms 的定义替换为不同的值。以上命令会被替换为 amd64、arm64
target: 要制作的目标镜像

制作成功后,我们可以在不同的架构服务器上拉取 someimage:latest 镜像,容器运行时会自动根据当前平台的架构来决定选择对应架构的容器运行。