使用 docker buildx 构建跨平台镜像

前言

在不同操作系统和处理器架构上运行应用是很普遍的场景,因此为不同平台单独构建发布版本是一种常见做法。当我们用来开发应用的平台与部署的目标平台不同时,实现这一目标并不容易。例如在 x86 架构上开发一个应用程序并将其部署到 ARM 平台的机器上,通常需要准备 ARM 平台的基础设施用于开发和编译。

一次构建多处部署的镜像分发大幅提高了应用的交付效率,对于需要跨平台部署应用的场景,利用docker buildx 构建跨平台的镜像也是一种快捷高效的解决方案。

大部分镜像托管平台支持多平台镜像,这意味着镜像仓库中单个标签可以包含不同平台的多个镜像,如图



通过 docker pull 或 docker run 拉取一个支持跨平台的镜像时,docker 会自动选择与当前运行平台相匹配的镜像。由于该特性的存在,在进行镜像的跨平台分发时,我们不需要对镜像的消费做任何处理,只需要关心镜像的生产,即如何构建跨平台的镜像。

docker buildx

  • 启用 Buildx
    macOS 或 Windows 系统的 Docker Desktop,以及 Linux 发行版通过 deb 或者 rpm 包所安装的 docker 内置了 buildx,不需要另行安装
  • buildx 构建方式
    docker buildx build .
    buildx 和 docker build 命令的使用体验基本一致,还支持 build 常用的选项如 -t、-f等
  • 查看docker buildx版本
    docker buildx version

docker buildx builder

Buildx 允许创建独立的builder。该环境不会更改共享守护程序的状态,或者用于隔离不同项目的构建

  • 查看当前的builder实例
    docker buildx ls
  • 创建新的builder实例
    docker buildx create --name [NAME]
  • 切换到指定的builder实例
    docker buildx use [NAME]
  • 检查当前builder实例确保该实例已经启动
    docker buildx inspect [NAME] --bootstrap
  • 停止builder实例
    docker buildx stop [NAME]
  • 删除builder实例
    docker buildx rm [NAME]

docker buildx demo

  • docker login

  • 在dockerhub创建对应的Repository

  • 创建一个builder实例

    docker buildx create --name lilqbuilder
    docker buildx use lilqbuilder
    docker buildx ls
    docker buildx inspect lilqbuilder --bootstrap
    docker buildx ls
    
  • clone 一个demo 项目

    git clone [email protected]:quan930/Multi-ArchitectureImagesDemo.git
    cd Multi-ArchitectureImagesDemo
    
  • build images
    docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm/v6,linux/s390x -t lilqcn/multi-architecture-demo:v1 --push .

  • 验证

    • 使用docker buildx imagetools检查镜像
      docker buildx imagetools inspect lilqcn/multi-architecture-demo:v1
    • 使用特定的SHA标记的镜像(amd64)
      docker run --rm lilqcn/multi-architecture-demo:v1@sha256:32b0f902d8ba557665cab930d2f6e94ee0bf23004ca8e7e5ed80638cf47a1c87 uname -m
  • github

  • docker.hub

你可能感兴趣的:(使用 docker buildx 构建跨平台镜像)