IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    诺多发表于 2024-09-06 23:00:00
    love 0

    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%.docker\cli-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:\ProgramData\Docker\cli-plugins
    • C:\Program Files\Docker\cli-plugins

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

    docker buildx version
    docker buildx ls
    

    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会自动根据当前宿主机的架构情况拉取相应的层。
    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】即可快速获取下载链接,打开链接后根据自己的平台下载即可。
    Buildx

    原创不易,如果觉得此文对你有帮助,不妨点赞+收藏+关注,你的鼓励是我持续创作的动力!

    高等精灵实验室



沪ICP备19023445号-2号
友情链接