利用 buildx 构建多架构镜像

利用 buildx 构建多架构镜像

温馨提示:本文最后更新于2024-11-29 11:21:26,某些文章具有时效性,若有错误或已失效,请在下方留言

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

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

启用 buildx 插件

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

➜  ~ docker -v
Docker version 27.3.1, build ce12230

检测 docker 版本
检测 docker 版本

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

export DOCKER_CLI_EXPERIMENTAL=enabled

启用 buildx 插件
启用 buildx 插件

验证是否开启

➜  ~ docker buildx version
github.com/docker/buildx v0.17.1 257815a6fbaee88976808020bf04274388275ae8

验证是否开启
验证是否开启

创建构建器

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

# ourhonourbuilder 为构建器的名称
➜  ~ docker buildx create --use --name ourhonourbuilder
ourhonourbuilder

启动构建器

启动构建器

➜  ~ docker buildx inspect ourhonourbuilder --bootstrap
[+] Building 24.2s (1/1) FINISHED                                                                                       
 => [internal] booting buildkit                                                                                   24.2s
 => => pulling image moby/buildkit:buildx-stable-1                                                                23.7s
 => => creating container buildx_buildkit_ourhonourbuilder0                                                        0.5s
Name:          ourhonourbuilder
Driver:        docker-container
Last Activity: 2024-10-31 02:22:34 +0000 UTC

查看支持的 CPU 架构

➜  ~ docker buildx ls
NAME/NODE               DRIVER/ENDPOINT    STATUS    BUILDKIT   PLATFORMS
ourhonourbuilder*       docker-container                        
 \_ ourhonourbuilder0    \_ orbstack       running   v0.16.0    linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/arm/v7, linux/arm/v6
default                 docker                                  
 \_ default              \_ default        running   v0.16.0    linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/arm/v7, linux/arm/v6
orbstack                docker                                  
 \_ orbstack             \_ orbstack       running   v0.16.0    linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/arm/v7, linux/arm/v6

构建镜像

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

# 登录Registry实例
# docker login --username=tadpolecasting crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com
sudo docker login --username=<账户名称> <网络域名>

# 构建镜像并推送
# 	docker buildx build -t crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com/ourhonour/flaskapi --platform=linux/arm64,linux/amd64 . --push
docker buildx build -t <网络域名>/<命名空间>/flaskapi --platform=linux/arm64,linux/amd64 . --push

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

上传的镜像
上传的镜像

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

docker buildx imagetools inspect  crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com/ourhonour/flaskapi
Name:      crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com/ourhonour/flaskapi:latest
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:56df128133f55acc3dcc0f16230e78fb8264f208f900916f4ebb7b9bed58607e
           
Manifests: 
  Name:        crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com/ourhonour/flaskapi:latest@sha256:373448de00d8f0601274582d308e878bb9dc8409c6651906646158bb1d0fd365
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm64
               
  Name:        crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com/ourhonour/flaskapi:latest@sha256:165feb58977dd08e138433dedfaf07eb7d083affd5aa27312e43b4228ee1ddff
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64

本地拉取镜像

登录阿里云Docker Registry

docker login --username=tadpolecasting crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com

隐藏内容,输入密码后查看
电脑开机密码

从Registry中拉取镜像

docker pull crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com/ourhonour/flaskapi

运行镜像

docker run -d --restart=always -p 5000:5000 crpi-jqvcwrlyhb9wwayw.cn-beijing.personal.cr.aliyuncs.com/ourhonour/flaskapi

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容