使用buildx编译多平台镜像
目前大部分使用docker的场景中不单单只是amd64平台了有时我们需要再arm和adm64上都能运行
新版本的docker默认自带
创建buildx
- 查看当前buildx实例
docker buildx ls
# NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
# default * docker
# default default running 23.0.5 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
默认会有个实例叫default,default实例下有一个default的node,一个实例下可以有多个node,星号是默认使用的实例,node有很多种类型
- 创建buildx
docker buildx create --name main --node local --driver docker-container --platform linux/amd64,linux/arm64,linux/arm/v8 --use
# main
- 查看下
docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
main * docker-container
local unix:///var/run/docker.sock inactive linux/amd64*, linux/arm64*, linux/arm/v8*
default docker
default default running 23.0.5 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
参数 | 说明 |
---|---|
–name | 实例名字 |
–drive | 使用的驱动:docker,docker-contran,k8s,remote |
–driver-op | 设置各个驱动的参数,比如docker-contran的镜像,k8s驱动的副本数等 |
–platform | 编译的平台 |
–user | 默认使用这个实例,等同于docker buildx use |
- 使用这个实例
docker buildx use main
- 当我们执行编译的时候会先下载buildx镜像并运行起来,然后使用这个容器运行的buildx来编译镜像
编译
- –platform执行要编译的平台,其他的参数和普通的build差不多
# 直接上传到仓库
docker buildx build --platform linux/amd64,linux/arm64,linux/arm -t naturelingran/m3u8-downloader -o type=registry .
- 输出本地
docker buildx build --platform linux/amd64,linux/arm64,linux/arm -t naturelingran/m3u8-downloader -o type=local,dest=./output .
- tar包
docker buildx build --platform linux/amd64,linux/arm64,linux/arm -t naturelingran/m3u8-downloader --output type=tar,dest=./output.tar .
- 直接导入到本地docker中,只支持单平台架构
docker buildx build --platform linux/arm64 -t naturelingran/m3u8-downloader --load .
参考资料
https://docs.docker.com/engine/reference/commandline/buildx_create