利用 buildx 构建多架构镜像

利用 buildx 构建多架构镜像

温馨提示:本文最后更新于2025-09-29 17:51:18,某些文章具有时效性,若有错误或已失效,请在下方留言

由于使用的是 M1 型号的 Mac 电脑,docker 构建出来的镜像是 ARM 架构的。如果要构建其他架构的镜像,需要使用 docker 的 buildx 插件。

ARM 架构的 Docker 镜像
ARM 架构的 Docker 镜像

启用 buildx 插件

buildx 插件是 docker 在 19.03 版本之后引入的,需要确保 docker 的版本不低于 19.03。

$ docker -v             
Docker version 28.3.3, build 980b856

在终端中输入以下的命令,启用 buildx 插件。

$ export DOCKER_CLI_EXPERIMENTAL=enabled

验证是否开启

$ docker buildx version
github.com/docker/buildx v0.25.0 faaea65da4ba0e58a13cd9cadcb950c51cf3b3c9

创建构建器

在终端输入以下命令,创建一个构建器,构建器的名称为 StewedNoodlesBuilder

# StewedNoodlesBuilder 为构建器的名称
$ docker buildx create --use --name StewedNoodlesBuilder
StewedNoodlesBuilder

启动构建器

启动构建器

$ docker buildx inspect StewedNoodlesBuilder --bootstrap
Name:          StewedNoodlesBuilder
Driver:        docker-container
Last Activity: 2025-09-29 02:11:15 +0000 UTC

Nodes:
Name:                  stewednoodlesbuilder0
Endpoint:              orbstack
Status:                running
BuildKit daemon flags: --allow-insecure-entitlement=network.host
BuildKit version:      v0.24.0
Platforms:             linux/arm64, linux/amd64, linux/amd64/v2, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/arm/v7, linux/arm/v6
Labels:
 org.mobyproject.buildkit.worker.executor:         oci
 org.mobyproject.buildkit.worker.hostname:         335cb2f6cc77
 org.mobyproject.buildkit.worker.network:          host
 org.mobyproject.buildkit.worker.oci.process-mode: sandbox
 org.mobyproject.buildkit.worker.selinux.enabled:  false
 org.mobyproject.buildkit.worker.snapshotter:      overlayfs
GC Policy rule#0:
 All:            false
 Filters:        type==source.local,type==exec.cachemount,type==source.git.checkout
 Keep Duration:  48h0m0s
 Max Used Space: 488.3MiB
GC Policy rule#1:
 All:            false
 Keep Duration:  1440h0m0s
 Reserved Space: 7.451GiB
 Max Used Space: 54.95GiB
 Min Free Space: 13.97GiB
GC Policy rule#2:
 All:            false
 Reserved Space: 7.451GiB
 Max Used Space: 54.95GiB
 Min Free Space: 13.97GiB
GC Policy rule#3:
 All:            true
 Reserved Space: 7.451GiB
 Max Used Space: 54.95GiB
 Min Free Space: 13.97GiB

查看支持的 CPU 架构

$ docker buildx ls
NAME/NODE                   DRIVER/ENDPOINT    STATUS    BUILDKIT   PLATFORMS
StewedNoodlesBuilder        docker-container                        
 \_ stewednoodlesbuilder0    \_ orbstack       running   v0.24.0    linux/amd64 (+2), linux/arm64, linux/arm (+2), linux/ppc64le, (4 more)
default                     docker                                  
 \_ default                  \_ default        running   v0.23.2    linux/amd64 (+2), linux/arm64, linux/arm (+2), linux/ppc64le, (4 more)
orbstack*                   docker                                  
 \_ orbstack                 \_ orbstack       running   v0.23.2    linux/amd64 (+2), linux/arm64, linux/arm (+2), linux/ppc64le, (4 more)

构建镜像

这里给予 dockerfile 进行构建,并将构建好镜像推送到阿里云 ARC 镜像服务。

# 登录Registry实例
$ docker login --username=stewednoodles crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com

# 构建镜像并推送
$ docker buildx build -t crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar --platform=linux/arm64,linux/amd64 . --push
隐藏内容,输入密码后查看
电脑开机密码,查看阿里云ARC访问凭证

命令执行完成之后,即可看到我们上传的镜像。

上传的镜像
上传的镜像

可以通过命令行查看每个镜像的信息

$ docker buildx imagetools inspect crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar
Name:      crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar:latest
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:7ff14e79e7d2bf823dd22c3e68de02afd4e7bb4eb92350edeba96cad96fba506
           
Manifests: 
  Name:        crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar:latest@sha256:d3e4941cf24063a00cd710ec93ba8f6d163738d2c5cd914aa68e337841706295
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm64
               
  Name:        crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar:latest@sha256:7d6c27ba6d4642a17c52e7f2d41e315deaf0b40b7dabb8936776768b1161a644
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64
               
  Name:        crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar:latest@sha256:f3c6fdecd11ffcdc782afb98996e957c0aac32b42c4c5c4ec799e20a9539a5a9
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.digest: sha256:d3e4941cf24063a00cd710ec93ba8f6d163738d2c5cd914aa68e337841706295
    vnd.docker.reference.type:   attestation-manifest
               
  Name:        crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar:latest@sha256:7727f0763a478b1f91af6029e6c9c651d5779ffe054c770a99a78d2ff75065b3
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations: 
    vnd.docker.reference.digest: sha256:7d6c27ba6d4642a17c52e7f2d41e315deaf0b40b7dabb8936776768b1161a644
    vnd.docker.reference.type:   attestation-manifest

本地拉取镜像

登录阿里云Docker Registry

$ docker login --username=stewednoodles crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com 

从Registry中拉取镜像

$ docker pull crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar

运行镜像

$ docker run -d --restart=always -p 5000:5000 crpi-6f31313pi8im9neg.cn-beijing.personal.cr.aliyuncs.com/stewednoodles/susar:latest
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容