Docker Buildx 构建多架构镜像

Docker Buildx 构建多架构镜像

简介

buildx 是 Docker 官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker 镜像,并支持多种平台的构建。使用 buildx,用户可以在单个命令中构建多种架构的镜像,例如 x86 和 ARM 架构,而无需手动操作多个构建命令。此外,buildx 还支持 Dockerfile 的多阶段构建和缓存,这可以大大提高镜像构建的效率和速度。

安装

buildx 是一个管理 Docker 构建的 CLI 插件,底层使用 BuildKit 扩展了 Docker 构建功能。

##blue##
BuildKit 是 Docker 官方提供的一个高性能构建引擎,可以用来替代 Docker 原有的构建引擎。相比于原有引擎,BuildKit 具有更快的构建速度、更高的并行性、更少的资源占用和更好的安全性。

要安装并使用 buildx,需要 Docker Engine 版本号大于等于 19.03。

如果你使用的是 Docker Desktop,则默认安装了 buildx。可以使用 docker buildx version 命令查看安装版本,得到以下类似输出,证明已经安装过了。

$ docker buildx version
github.com/docker/buildx v0.9.1 ed00243a0ce2a0aee75311b06e32d33b44729689

如果需要手动安装,可以从 GitHub 发布页面下载对应平台的最新二进制文件,重命名为 docker-buildx,然后将其放到 Docker 插件目录下(Linux/Mac 系统为 $HOME/.docker/cli-plugins,Windows 系统为 %USERPROFILE%.docker\cli-plugins)。

Linux/Mac 系统还需要给插件增加可执行权限 chmod +x ~/.docker/cli-plugins/docker-buildx,之后就可以使用 buildx 了。

更详细的安装过程可以参考官方文档

使用

1.使用 imagetools 来检查跨平台镜像的 manifest 信息

$ docker buildx imagetools inspect jianghushinian/hello-go
Name:      docker.io/jianghushinian/hello-go:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:51199dadfc55b23d6ab5cfd2d67e38edd513a707273b1b8b554985ff562104db

Manifests:
  Name:      docker.io/jianghushinian/hello-go:latest@sha256:8032a6f23f3bd3050852e77b6e4a4d0a705dfd710fb63bc4c3dc9d5e01c8e9a6
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm64

  Name:      docker.io/jianghushinian/hello-go:latest@sha256:fd46fd7e93c7deef5ad8496c2cf08c266bac42ac77f1e444e83d4f79d58441ba
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/amd64

可以看到,这个跨平台镜像包含了两个目标平台的镜像,分别是 linux/arm64linux/amd64
2.用 docker buildx 来构建跨平台镜像

$ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go .

docker buildx build 语法跟 docker build 一样,--platform 参数表示构建镜像的目标平台,-t 表示镜像的 Tag,. 表示上下文为当前目录。

唯一不同的是对 --platform 参数的支持,docker build--platform 参数只支持传递一个平台信息,如 --platform linux/arm64,也就是一次只能构建单个平台的镜像。

而使用 docker buildx build 构建镜像则支持同时传递多个平台信息,中间使用英文逗号分隔,这样就实现了只用一条命令便可以构建跨平台镜像的功能。

执行以上命令后,我们将会得到一条警告:

WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load

这条警告提示我们没有为 docker-container 驱动程序指定输出,生成结果将只会保留在构建缓存中,使用 --push 可以将镜像推送到 Docker Hub 远程仓库,使用 --load 可以将镜像保存在本地。

这是因为我们新创建的 mybuilder 是启动了一个容器来运行 BuildKit,它并不能直接将构建好的跨平台镜像输出到本机或推送到远程,必须要用户来手动指定输出位置。

我们可以尝试指定 --load 将镜像保存的本地主机。

$ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go --load .
[+] Building 0.0s (0/0)
ERROR: docker exporter does not currently support exporting manifest lists

结果会得到一条错误日志。看来它并不支持直接将跨平台镜像输出到本机,这其实是因为传递了多个 --platform 的关系,如果 --platform 只传递了一个平台,则可以使用 --load 将构建好的镜像输出到本机。

那么我们就只能通过 --push 参数将跨平台镜像推送到远程仓库了。不过在此之前需要确保使用 docker login 完成登录。

$ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go --push .

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

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Buildx 是 Docker 官方发布的一款用于构建和打包 Docker 镜像的工具。它可以支持多种不同的构建器,包括 Dockerfile、BuildKit、Jib 等,同时还支持多种不同的平台和架构。 以下是使用 Docker Buildx 进行构建的步骤: 1. 安装 Docker Buildx 在 Docker 19.03 版本以上,Docker Buildx 已经内置,可以直接使用。如果你使用的是旧版本的 Docker,则需要安装 Docker Buildx 插件。可以通过以下命令进行安装: ``` docker buildx install ``` 2. 创建一个可用的构建器 使用 `docker buildx create` 命令创建一个可用的构建器,可以使用 `docker buildx ls` 命令查看所有可用的构建器。例如: ``` docker buildx create --name mybuilder ``` 3. 切换到指定的构建器 使用 `docker buildx use` 命令切换到指定的构建器,例如: ``` docker buildx use mybuilder ``` 4. 构建 Docker 镜像 使用 `docker buildx build` 命令来构建 Docker 镜像,例如: ``` docker buildx build --platform linux/amd64,linux/arm64 -t myimage:latest . ``` 其中 `--platform` 参数指定了要构建的平台和架构,`-t` 参数指定了镜像的名称和版本,`.` 表示 Dockerfile 所在的目录。 5. 推送 Docker 镜像 使用 `docker buildx push` 命令来推送 Docker 镜像,例如: ``` docker buildx push myimage:latest ``` 这样就完成了 Docker 镜像构建和推送。 除了上述基本操作,Docker Buildx 还支持其他一些高级功能,如多阶段构建构建缓存、并发构建等。更多详细的使用方法可以参考 Docker 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值