使用Docker Buildx 轻松构建跨平台镜像

admin 2024年9月7日10:10:35评论14 views字数 2494阅读8分18秒阅读模式

使用Docker Buildx 轻松构建跨平台镜像

经常玩Docker的小伙伴应该知道,直接使用docker build构建出来的镜像架构是跟构建机的CPU架构绑定的,比如你用x86的机器,构建出来的镜像通常只能在x86的设备上跑,遇到事Arm或其他架构的设备想要使用这个镜像时就难受了,大概率会启动不了或启动后各种报错。笔者介绍的这个工具:Buildx就厉害了,可以在一台设备上打出多个架构的Docker镜像,

🎭 功能简介

Docker Buildx 是 Docker 官方提供的一个构建工具,它底层使用 BuildKit 扩展了 Docker 的构建功能。Buildx 不仅保留了标准 docker build 的所有功能,还加入了一些强大的新特性,如多平台构建、构建缓存优化、多阶段构建支持等。具体如下:

  • 多平台构建:
    Buildx 支持在单个命令中为多个平台构建 Docker 镜像,如同时构建适用于 Windows、Linux 和 ARM 架构的镜像。这大大提高了开发效率,减少了手动操作的复杂性。

  • 构建缓存:
    Buildx 支持高级构建缓存机制,能够显著加快重复构建的速度。它智能地利用缓存来避免不必要的重新构建步骤,从而节省时间和资源。

  • 阶段构建:
    Buildx 支持 Dockerfile 的多阶段构建,允许开发者在单个 Dockerfile 中定义多个构建阶段,每个阶段都可以使用不同的基础镜像和配置。这有助于优化镜像大小和提高构建效率。

  • 构建策略:
    用户可以根据需求定义构建策略,例如选择不同的构建环境、镜像源等。这为开发者提供了更灵活的构建选项,以满足不同的构建需求。

  • 并发构建:
    Buildx 可以并行构建多个镜像层,提高构建效率。这对于包含多个依赖项或复杂构建步骤的大型项目尤其有用。

🦀 安装与使用

1️⃣ 安装Buildx

在 Docker 19.03 及更高版本中,Buildx 通常已经内置,只需要对/etc/docker/deamon.json进行配置并重启Docker即可。

{
 "experimental": "enabled"
}

对于旧版本的 Docker,请在文末获取二进制包后安装下面的方法进行配置:

首先将下载下来的文件重命名,复制到相应的位置,见下面的表格

系统 文件名 保存位置
Linux docker-buildx $HOME/.docker/cli-plugins
macOS docker-buildx $HOME/.docker/cli-plugins
Windows docker-buildx.ext %USERPROFILE%.dockercli-plugins

记得给予执行权限哦:$ chmod +x ~/.docker/cli-plugins/docker-buildx。除了复制到上面表格中的位置,也可以复制到以下位置:

Linux和macOS:

  • /usr/local/lib/docker/cli-plugins 或 /usr/local/libexec/docker/cli-plugins
  • /usr/lib/docker/cli-plugins 或 /usr/libexec/docker/cli-plugins

Windows:

  • C:ProgramDataDockercli-plugins
  • C:Program FilesDockercli-plugins

然后在终端中执行下面命令,可以看到输出了版本号和当前已经安装的构建器,就算正常了。

docker buildx version
docker buildx ls

使用Docker Buildx 轻松构建跨平台镜像

2️⃣ 使用Buildx

Buildx默认已经包含一个名为default的构建器,我们也可以自己创建一个:

# 创建一个名为mybuilder的构建器
docker buildx create --use --name mybuilder

如何使用这个构建器构建镜像呢?很简单,在终端中切换到需要构建的项目中(需要提前写好Dockerfile),然后执行下面命令即可:

docker buildx build --builder mybuildx  -t fooololo/it-tools:latest  --platform linux/amd64,linux/arm64  --push .
  • docker buildx build,表示使用buildx构建
  • --builder mybuildx,指定buildx的构建器
  • -t fooololo/it-tools:latest,为镜像指定名称和标签
  • --platform linux/amd64,linux/arm64 ,指定构建镜像的目标平台。在这个例子中,镜像将被构建为适用于amd64和arm64两种架构,当然也可以指定更多,用逗号分隔
  • --push,在构建完成后,将镜像推送到 Docker 仓库
  • . 表示 Dockerfile 所在的上下文目录

下图可以看到,镜像推送到Dockerhub后,显示支持amd64和arm64两种架构。当你在pull这个镜像时,Docker会自动根据当前宿主机的架构情况拉取相应的层。使用Docker Buildx 轻松构建跨平台镜像

3️⃣ Buildx支持的架构

Buildx支持构建以下类型的镜像,当你一次需要构建的架构越多,构建需要花费的时间也就越长,大家在使用的时候还是要合理选择,一般来说linux/arm64和linux/amd64是主流,其他的架构量力而行。

  • 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

4️⃣ 设置为docker build 默认使用Buildx

为了日常操作方便,我们也可以将docker build命令默认替换为使用Buildx,只需要输入下面命令即可:

docker buildx install

如果要取消这个替换,使用下面命令:

docker buildx uninstall

⏬ 获取Buildx

最后,笔者也整理了桌面版的Buildx,需要的话可以在笔者公众号私信【Buildx】即可快速获取下载链接,打开链接后根据自己的平台下载即可。使用Docker Buildx 轻松构建跨平台镜像

原文始发于微信公众号(高等精灵实验室):使用Docker Buildx 轻松构建跨平台镜像

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月7日10:10:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用Docker Buildx 轻松构建跨平台镜像http://cn-sec.com/archives/3141195.html

发表评论

匿名网友 填写信息