简介
docker buildx
是Docker的多平台镜像构建工具,它可以帮助您在不同的处理器架构上进行跨平台构建。它是一个功能强大的工具,允许您使用单个命令构建多个平台Docker镜像。
该功能仅适用于 Docker v19.03+ 版本
新建 Builder 实例
由于 Docker 默认的 builder 实例不支持同时指定多个 --platform
,我们必须首先创建一个新的 Builder 实例。
docker buildx create --name mybuilder --driver docker-container
使用新创建好的 Builder 实例
docker buildx use mybuilder
查看已有的 Builder 实例
docker buildx ls
安装编译时需要支持的平台
docker run --rm --privileged tonistiigi/binfmt --install all
Linux内核版本需要 >= 4.8
使用 builder 构建跨平台镜像
准备演示代码
这里以一个 Go 程序为例,来演示如何构建跨平台镜像
hello.go
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Printf("Hello, %s/%s!\n", runtime.GOOS, runtime.GOARCH)
}
go.mod
module hello
go 1.20
编写 Dockerfile
FROM golang:1.20-alpine AS builder
WORKDIR /app
ADD . .
RUN go build -o hello .
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/hello .
CMD ["./hello"]
这是一个普通的
Dockerfile
文件,为了减小镜像大小,使用了多阶段构建。它跟构建仅支持当前平台的镜像所使用的Dockerfile
没什么两样
构建镜像
docker buildx build --platform linux/arm64,linux/amd64 -t ochh/hello-go . --push
--platform
:表示构建镜像的目标平台
-t
: 表示镜像的 Tag
.
: 表示上下文为当前目录
--push
: 将镜像推送到 Docker Hub 远程仓库
docker buildx build
语法跟 docker build
一样,唯一不同的是对 --platform
参数的支持,docker build
的 --platform
参数只支持传递一个平台信息,如 --platform linux/arm64
,也就是一次只能构建单个平台的镜像。而使用 docker buildx build
构建镜像则支持同时传递多个平台信息,中间使用英文逗号分隔,这样就实现了只用一条命令便可以构建跨平台镜像的功能。
评论区