Docker使用Buildx构建多平台镜像
起因
最近使用M1时发现构建的镜像与云服务的架构不符导致云服务器的镜像跑不起来,出现下面错误,最好的解决方案是使用buildx一次性构建多平台镜像。
1WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
2standard_init_linux.go:228: exec user process caused: exec format error
简介
buildx
是 Docker
官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker
镜像,并支持多种平台的构建。使用 buildx
,用户可以在单个命令中构建多种架构的镜像,例如 x86 和 ARM 架构,而无需手动操作多个构建命令。此外,buildx
还支持 Dockerfile 的多阶段构建和缓存,这可以大大提高镜像构建的效率和速度。要安装并使用 buildx
,需要 Docker Engine 版本号大于等于 19.03。如果你使用的是 Docker Desktop,则默认安装了 buildx
。可以使用 docker buildx version
命令查看安装版本,得到以下类似输出,证明已经安装过了。
1docker buildx version
2github.com/docker/buildx v0.10.4 c513d34049e499c53468deac6c4267ee72948f02
如需要安装,查看官方文档: https://docs.docker.com/build/architecture/
命令
1# 查看当前的builder实例
2docker buildx ls
3# 创建新的builder实例
4docker buildx create --name [NAME]
5# 切换到指定的builder实例
6docker buildx use [NAME]
7# 检查当前builder实例确保该实例已经启动
8docker buildx inspect [NAME] --bootstrap
9# 停止builder实例
10docker buildx stop [NAME]
11# 删除builder实例
12docker buildx rm [NAME]
创建Buildx构建容器
1#创建并使用buildx构建容器
2docker buildx create --use --name arm_builder
3#初始化构建容器
4docker buildx inspect --bootstrap
5
6Name: arm_builder
7Driver: docker-container
8Last Activity: 2023-06-05 19:58:39 +0000 UTC
9
10Nodes:
11Name: arm_builder0
12Endpoint: unix:///var/run/docker.sock
13Status: running
14Buildkit: v0.11.6
15Platforms: linux/arm64, linux/amd64, linux/amd64/v2, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
当初始化成功,会拉下来moby/buildkit:buildx-stable-1的镜像,并启动构建容器。通过 docker ps 查看如下:
1docker ps
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38c64cc3388eb moby/buildkit:buildx-stable-1 "buildkitd" 3 hours ago Up 3 hours buildx_buildkit_arm_builder0
构建不同平台镜像
这里使用了amd64
、arm64
,amd64=x86_64=x64!=IA64,arm64用于苹果芯片
1docker buildx build --platform linux/amd64,linux/arm64 --no-cache --push -t ${image} .
buildx构建本地镜像
这里使用了--load
参数,并且--platform
只能有一个参数,linux/arm64
根据自己的系统选择
1docker buildx build --platform linux/arm64 --no-cache --load -t ${image} .
项目使用示例
https://github.com/basicimage/alpine
发布日期:2023-06-05 13:44 字数:201 用时
tags:Docker
标签云
alpine(1) api网关(1) async(1) await(1) centos(4) cli(1) client-go(1) debug(1) docker(10) docker-compose(1) dockerfile(1) embed(1) es6(1) etcd(1) etcdctl(1) freemesh(2) git(6) go(5) go-zeus(5) goland(2) golang(7) grafana(2) grpc(5) grpcurl(1) homebrew(1) homedir(1) http(2) hugo(1) java(2) javascript(3) job(1) js(1) json(1) k8s(16) k8s部署指南(1) kubebuilder(1) kubectl(4) kubernetes(1) linux(2) localecompare(1) lombok(1) metrics(2) mock(1) mysql(1) npm(1) nsenter(1) nvm(1) pnpm(2) pprof(1) prettier(1) prometheus(2) protobuf3(1) protoc(1) qiankun(1) request(1) scss(1) servicemesh(1) spring(1) springcloud->freemesh(1) ssh(2) systemctl(1) tcpdump(1) typescript(2) vite(2) vscode(2) vue(8) vue-admin(2) vue3(1) webssh(1) xtermjs(1) xxl-job(1) yarn(1) zookeeper(1) 云原生(4) 云原生框架(1) 介绍(1) 单体架构->freemesh(1) 单元化(1) 博客(1) 压缩(1) 可观测(1) 后台管理系统(1) 命名规范(1) 多云多活(1) 如水网(1) 安全(1) 安装(1) 容器(2) 开发联调神器(1) 微前端(1) 微服务(2) 微服务架构->freemesh(1) 微服务框架(1) 快速开始(1) 控制面(1) 数据面(1) 文集(2) 服务发现(1) 服务网格(1) 流量泳道(1) 流量管理(1) 监控告警(1) 端口映射(1) 证书(1) 负载均衡(1) 配置(1)