通过 Docker 构建双架构镜像(如同时支持 x86 和 ARM 架构)通常需要使用 Docker Buildx 插件。以下是详细的步骤:
Docker Buildx 是 Docker 官方提供的工具,用于构建多架构镜像。如果系统中尚未安装 Buildx,可以通过以下命令安装:
mkdir -p $HOME/.docker/cli-plugins
wget https://github.com/docker/buildx/releases/download/v0.12.0/buildx-v0.12.0.linux-amd64 -O $HOME/.docker/cli-plugins/docker-buildx
chmod +x $HOME/.docker/cli-plugins/docker-buildx
安装完成后,可以通过以下命令查看 Buildx 版本:
docker buildx version
apt install -y qemu-user-static binfmt-support
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
创建一个新的 Buildx 构建器实例,并设置为默认构建器:
docker buildx create --name mybuilder --bootstrap --use
编写一个适用于多架构的 Dockerfile。例如:
FROM --platform=$TARGETPLATFORM alpine:latest
RUN echo "This is a multi-arch image"
这里使用了 --platform=$TARGETPLATFORM
参数,确保基础镜像与目标架构一致
使用 Buildx 构建并推送镜像到 Docker Hub 或其他镜像仓库:
docker buildx build --platform linux/amd64,linux/arm64 -t yourusername/multiarch-image:latest --push .
此命令会同时构建 x86_64 和 ARM64 架构的镜像,并推送到指定仓库。
或者只构建镜像,文件报存到本地:
docker buildx build --platform=linux/amd64 -t yourusername/multiarch-image:latest-amd64 . --load
docker buildx build --platform=linux/arm64 -t yourusername/multiarch-image:latest-arm64 . --load
# 保存多架构镜像
docker save -o multiarch-image-amd64.tar yourusername/multiarch-image:latest-amd64
docker save -o multiarch-image-arm64.tar yourusername/multiarch-image:latest-arm64
# 导入镜像仓库,双架构
docker load -i multiarch-image-amd64.tar
docker load -i multiarch-image-arm64.tar
docker tag yourusername/multiarch-image:latest-amd64 registry:5000/yourusername/multiarch-image:latest-amd64
docker tag yourusername/multiarch-image:latest-arm64 registry:5000/yourusername/multiarch-image:latest-arm64
docker push registry:5000/yourusername/multiarch-image:latest-amd64
docker push registry:5000/yourusername/multiarch-image:latest-arm64
# 构建双架构镜像
docker manifest create --insecure registry:5000/yourusername/multiarch-image:latest registry:5000/yourusername/multiarch-image:latest-amd64 registry:5000/yourusername/multiarch-image:latest-arm64
docker manifest push --insecure registry:5000/yourusername/multiarch-image:latest
可以通过以下命令查看镜像的多架构支持情况:
docker buildx imagetools inspect yourusername/multiarch-image:latest
buildkitd.toml
文件以支持非 HTTPS 推送通过以上步骤,即可成功构建支持双架构的 Docker 镜像。