操作场景
多架构镜像是指在同一个镜像仓库中包含了多个不同架构的镜像,以满足不同架构的硬件平台的需求。
当容器运行时拉取多架构镜像时,可以自动选择适配当前操作系统架构的镜像,从而提高部署效率。
本文介绍如何构建多架构镜像并推送到容器镜像服务。
前提条件
- 已开通容器镜像服务企业版实例,参考:开通企业版实例
- 本地已安装Docker客户端
操作步骤
通过Dockerfile构建多架构镜像
- 本节以Go项目为例,构建如下Dockerfile文件 :
ARG GOLANG_IMAGE="golang:1.19.3"
ARG BASE_IMAGE="alpine:3.16.5"
ARG TAG=1.0.0
FROM ${GOLANG_IMAGE} as build-cache
WORKDIR /build
COPY . ./
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags "-X my-app/version.Version=${TAG}" -o my-app .
FROM ${BASE_IMAGE}
COPY --from=build-cache /build/my-app /
WORKDIR /
ENTRYPOINT ["./my-app"]
- 登录容器镜像服务企业版实例。
docker login –username=<username> <企业版实例地址>
- 使用
docker buildx
命令构建并推送多架构镜像到容器镜像服务企业版实例。
docker buildx build . -t <企业版实例地址>/<命名空间>/<镜像仓库>:<版本> --platform linux/amd64,linux/arm64 --push
通过已有镜像构建多架构镜像
- 若本地已有多个单架构镜像,则可以将其合并成一个多架构镜像。本节以一个arm64架构和一个amd64架构的Nginx镜像为例进行演示。
- 登录容器镜像服务企业版实例。
docker login –username=<username> <企业版实例地址>
- 通过
docker tag
和docker push
命令将单架构镜像分别推送至容器镜像服务企业版实例:
docker tag nginx:arm64 <企业版实例地址>/<命名空间>/nginx:arm64
docker push <企业版实例地址>/<命名空间>/nginx:arm64
docker tag nginx:amd64 <企业版实例地址>/<命名空间>/nginx:amd64
docker push <企业版实例地址>/<命名空间>/nginx:amd64
- 通过
docker manifest create
命令创建一个多架构镜像的Manifest List:
docker manifest create <企业版实例地址>/<命名空间>/nginx:multi \
<企业版实例地址>/<命名空间>/nginx:arm64 \
<企业版实例地址>/<命名空间>/nginx:amd64
- 通过
docker manifest push
命令将Manifest List推送到容器镜像服务企业版实例中:
docker manifest push <企业版实例地址>/<命名空间>/nginx:multi