天之苍苍其正色邪

发布于     更新于
通过 buildx 构建支持多平台的 docker 镜像

天之苍苍,其正色邪?其远而无所至极邪?其视下也亦若是,则已矣。

首先查看本机的 buildx 的支持的平台

docker buildx ls

amd64 的机器,默认只支持 amd64 和 i386

NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker
  default default         running linux/amd64, linux/386

运行一个镜像开启多平台的支持,文档 https://docs.docker.com/buildx/working-with-buildx/#linux-packages

docker run --privileged --rm tonistiigi/binfmt --install all

再看 docker buildx ls 的结果:

NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker                  
  default default         running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6

然后需要自己创建一个 builder

docker buildx create --use --name mybuilder
docker buildx inspect mybuilder --bootstrap

再看 docker buildx ls 的结果,这里已经将 mybuilder 设置成了默认的 builder

NAME/NODE    DRIVER/ENDPOINT             STATUS  PLATFORMS
mybuilder *  docker-container                    
  mybuilder0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
default      docker                              
  default    default                     running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6

然后构建多平台的镜像

docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t project-test . --build-arg build_mode=dev --push

查看镜像的信息

docker buildx imagetools inspect project-test
Name:      project-test:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:b61a0c16396d9736b009db69007cef344cc80c0b7b9f3cf76797209fed975434
           
Manifests: 
  Name:      project-test:latest@sha256:e2ba1d0f700689338885973e0e24c3e990c1d6e26ed0e5fd8dc0722ea57e80dc
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm/v7
             
  Name:      project-test:latest@sha256:1c0671de50fd4fcf2ad320c3b8dba7de32c65829ec7f90494ff96031b10aef51
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm64
             
  Name:      project-test:latest@sha256:a09d9fe7334e832826127dfc0ccbef1beeb763be1820f71e6864f4af69991472
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/amd64

参考:http://dockeradv.baoshu.red/buildx/multi-arch-images.html