构建和推送多架构镜像到容器镜像服务

2024-11-06 02:38:59

操作场景

多架构镜像是指在同一个镜像仓库中包含了多个不同架构的镜像,以满足不同架构的硬件平台的需求。

当容器运行时拉取多架构镜像时,可以自动选择适配当前操作系统架构的镜像,从而提高部署效率。

本文介绍如何使用容器镜像服务构建多架构镜像。

前提条件

          已开通容器镜像服务企业版实例

          本地已安装Docker客户端

操作步骤

通过Dockerfile构建多架构镜像

1.       本节以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"]

2.       登录容器镜像服务企业版实例

docker login –username=<username> <企业版实例地址>

3.       使用docker buildx命令构建并推送多架构镜像到容器镜像服务企业版实例

docker buildx build . -t <企业版实例地址>/<命名空间>/<镜像仓库>:<版本>  --platform linux/amd64,linux/arm64 --push

通过已有镜像构建多架构镜像

1.       若本地已有多个单架构镜像,则可以将其合并成一个多架构镜像。本节以一个arm64架构和一个amd64架构的Nginx镜像为例进行演示。

2.       登录容器镜像服务企业版实例

docker login –username=<username> <企业版实例地址>

3.       通过docker tagdocker push命令将单架构镜像分别推送至容器镜像服务企业版实例:

docker tag nginx:arm64 <企业版实例地址>/<命名空间>/nginx:arm64
 
docker push <企业版实例地址>/<命名空间>/nginx:arm64
 
 
 
docker tag nginx:amd64 <企业版实例地址>/<命名空间>/nginx:amd64
 
docker push <企业版实例地址>/<命名空间>/nginx:amd64

4.       通过docker manifest create命令创建一个多架构镜像的Manifest List:

docker manifest create <企业版实例地址>/<命名空间>/nginx:multi \
 
 <企业版实例地址>/<命名空间>/nginx:arm64 \
 
 <企业版实例地址>/<命名空间>/nginx:amd64

5.       通过docker manifest push命令将Manifest List推送到容器镜像服务企业版实例中:

docker manifest push <企业版实例地址>/<命名空间>/nginx:multi


hiT9mw7ft_fC