1手动拉取基础镜像,创建多架构镜像
1.1 拉取镜像
-
pull amd64架构镜像
docker pull golang:1.24.4-alpine3.22 --platform=amd64 docker image tag golang:1.24.4-alpine3.22 harbor.cn/XXX/golang:1.24.4-alpine3.22-amd64
-
pull arm64架构镜像
docker pull golang:1.24.4-alpine3.22 --platform=arm64 docker image tag golang:1.24.4-alpine3.22 harbor.cn/XXX/golang:1.24.4-alpine3.22-arm64
1.2 推送镜像
-
push amd64架构镜像
docker push harbor.cn/XXX/golang:1.24.4-alpine3.22-amd64
-
push arm64架构镜像
docker push harbor.cn/XXX/golang:1.24.4-alpine3.22-arm64
4.3 制作manifest
-
create
docker manifest create harbor.cn/XXX/golang:1.24.4-alpine3.22 \ harbor.cn/XXX/golang:1.24.4-alpine3.22-amd64 \ harbor.cn/XXX/golang:1.24.4-alpine3.22-arm64
-
push
docker manifest push harbor.cn/XXX/golang:1.24.4-alpine3.22
2 利用docker buildx跨平台构建
2.1 确认版本支持
docker buildx version
2.2 创建多平台支持的Builder实例
# 创建 BuildKit 配置文件--镜像源,若不需要镜像源,可以不配
mkdir -p ~/.docker/buildkit
cat > ~/.docker/buildkit/buildkitd.toml <<EOF
[registry."docker.io"]
mirrors = [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://dockerproxy.com"
]
EOF
# 创建构建器(使用 docker-container 驱动)
docker buildx create \
--use \
--name multi-builder \
--driver docker-container \
--config ~/.docker/buildkit/buildkitd.toml \
--buildkitd-flags "--allow-insecure-entitlement security.insecure"
docker buildx inspect --bootstrap # 初始化
# 查看构建器
# docker buildx ls
# 删除构建器
# docker buildx rm multiarch-builder
2.3 Dockerfile
FROM alpine:3.22 #需要基础镜像支持跨架构
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.22/main" > /etc/apk/repositories \
&& echo "https://mirrors.ustc.edu.cn/alpine/v3.22/community" >> /etc/apk/repositories \
&& apk update \
&& apk add --no-cache curl \
&& rm -rf /var/cache/apk/*
2.4 执行编译命令
docker-buildx.sh
docker buildx build \
-t harbor.cn/XXX/base:1.0.0-alpine3.22 \
--platform=linux/amd64,linux/arm64 . --push