当前位置: 首页 > news >正文

使用buildx构建镜像

创建支持 x86 和 ARM64 的 buildx Builder 并构建镜像

前提条件

  1. Docker 版本:确保 Docker ≥ 19.03,运行:
    docker --version
    
  2. buildx 插件:确认 buildx 可用:
    docker buildx version
    
    若不可用,需启用实验性功能或安装插件(见下方)。
  3. QEMU 模拟器:为跨平台构建安装 QEMU(Docker Desktop 通常已包含,Linux 系统需手动安装):
    sudo apt-get install qemu-user-static
    
  4. 实验性功能(若 buildx 不可用):编辑 ~/.docker/config.json
    {"experimental": "enabled"
    }
    
    或临时设置:
    export DOCKER_CLI_EXPERIMENTAL=enabled
    

步骤 1:创建支持 x86 和 ARM64 的 Builder

  1. 创建 Builder 实例

    docker buildx create --name multiarch-builder \--driver docker-container \--platform linux/amd64,linux/arm64 \--use
    
    • --name multiarch-builder:命名 Builder。
    • --driver docker-container:使用容器驱动隔离构建。
    • --platform:指定支持 linux/amd64linux/arm64
    • --use:设为默认 Builder。
  2. 启动并验证 Builder

    docker buildx inspect --bootstrap
    
    • 输出示例:
      Name:   multiarch-builder
      Driver: docker-container
      Nodes:
      Name:      multiarch-builder0
      Endpoint:  default
      Status:    running
      Platforms: linux/amd64, linux/arm64
      
    • 确认 Platforms 包含 linux/amd64linux/arm64
  3. 列出 Builder

    docker buildx ls
    
    • 确保 multiarch-builder 状态为 running

步骤 2:使用 Builder 构建多平台镜像

  1. 准备 Dockerfile
    确保当前目录有一个有效的 Dockerfile,例如:

    FROM alpine:latest
    CMD ["echo", "Hello, Multi-Arch World!"]
    
  2. 构建并推送镜像
    使用 multiarch-builder 构建支持 x86 和 ARM64 的镜像:

    docker buildx build \--builder multiarch-builder \--platform linux/amd64,linux/arm64 \-t yourusername/myimage:latest \--push .
    
    • --builder multiarch-builder:指定使用创建的 Builder。
    • --platform:目标架构。
    • -t:镜像名称(替换 yourusername 为你的 Docker Hub 用户名)。
    • --push:构建后推送到镜像仓库。
    • .:当前目录(包含 Dockerfile)。
  3. 验证构建结果

    • 检查镜像是否支持多平台:
      docker buildx imagetools inspect yourusername/myimage:latest
      
    • 输出将显示支持的架构(如 linux/amd64linux/arm64)。

注意事项

  • Docker Hub 登录:推送镜像前需登录:
    docker login
    
  • QEMU 安装:若缺少平台支持,运行:
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    
  • 性能优化:启用 BuildKit 缓存以加速构建:
    export DOCKER_BUILDKIT=1
    
  • 权限:确保用户有 Docker 权限:
    sudo usermod -aG docker $USER
    
  • 清理:若需删除 Builder:
    docker buildx rm multiarch-builder
    

验证

确认 Builder 和镜像支持 x86 和 ARM64:

docker buildx inspect multiarch-builder
docker buildx imagetools inspect yourusername/myimage:latest
http://www.dtcms.com/a/315926.html

相关文章:

  • 若依前后端分离版学习笔记(五)——Spring Boot简介与Spring Security
  • [驱动开发篇] Can通信进阶 --- CanFD 的三次采样
  • Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
  • 深度学习-卷积神经网络CNN-填充与步幅
  • AR文旅新纪元:从黄姚古镇到秦始皇陵,虚实共生的沉浸式体验革命
  • 华为云云产品的发展趋势:技术创新驱动数字化未来
  • 基于Docker的RabbitMQ运行参数设置
  • 基于华为开发者空间的Open WebUI数据分析与可视化实战
  • 光伏清洗机器人是什么?艾利特协作机器人如何重塑新能源运维效率
  • 【18】C实战篇——C语言 文件读写【fputc、fgetc、fputs、fgets】
  • FPGA学习笔记——简易的DDS信号发生器
  • 力扣106:从中序与后序遍历序列构造二叉树
  • Android 之 Kotlin 和 MVVM 架构的 Android 登录示例
  • 宝塔(免费版9.2.0)的docker拉取仓库失败的加速方法
  • 数据挖掘,到底是在挖掘什么?
  • 27-数据仓库与Apache Hive-2
  • 26-数据仓库与Apache Hive
  • LTR-308ALS-01 LiteOn光宝高精度光耦隔离器 5000Vrms持续隔离电压
  • Python-初学openCV——图像预处理(七)——亮度变换、形态学变换
  • 基于Flask的微博话题多标签情感分析系统设计
  • 李宏毅深度学习教程 第12-13章 对抗攻击 + 迁移学习transfer learning
  • NLP——BERT模型全面解析:从基础架构到优化演进
  • Idea无法识别Maven项目处理
  • 机器翻译的局限性:歧义、文化差异、专业术语翻译难题
  • Python-深度学习--1交叉熵损失函数
  • aab文件直接安装到手机
  • 西门子PLC基础指令4:置位指令 S、复位指令 R
  • 超越注意力机制
  • 【基础】第二篇 Java 类的定义、构造器、成员变量与方法详解
  • hyper-v实战系列:显卡虚拟化(GPU分区)--windows篇详解