美文网首页
使用 docker buildx 构建跨平台镜像

使用 docker buildx 构建跨平台镜像

作者: quanCN | 来源:发表于2021-11-13 18:20 被阅读0次

    前言

    在不同操作系统和处理器架构上运行应用是很普遍的场景,因此为不同平台单独构建发布版本是一种常见做法。当我们用来开发应用的平台与部署的目标平台不同时,实现这一目标并不容易。例如在 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 git@github.com: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 构建跨平台镜像

          本文链接:https://www.haomeiwen.com/subject/zrszzltx.html