侧边栏壁纸
  • 累计撰写 73 篇文章
  • 累计创建 30 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Docker Buildx构建多平台镜像

欧泡果奶
2023-12-17 / 0 评论 / 0 点赞 / 159 阅读 / 0 字

简介

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

Builder实例

安装编译时需要支持的平台

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 构建镜像则支持同时传递多个平台信息,中间使用英文逗号分隔,这样就实现了只用一条命令便可以构建跨平台镜像的功能。

登录 Docker Hub 就可以看见推送上来的跨平台镜像

Docker Hub

在不同平台验证

不同平台验证

0

评论区