二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

    • 从DockerHub到阿里云镜像仓库:整理汇总我同步过的docker镜像(公开可匿名pull)
    • docker的几种安装方式
    • docker配置加速器的几种方案
    • docker搭建官方版私有仓库(了解)
    • Docker笔记之企业级仓库harbor搭建
    • 认识了解Dockerfile
    • 利用Dockerfile创建一些基础镜像
    • Docker笔记之与镜像相关的命令整理
    • 从docker容器时间问题探究到Namespace问题
    • Docker笔记之制作kafka镜像
    • Docker笔记之制作lnmp镜像
    • Docker笔记之使用apline镜像
    • Docker笔记之修改默认数据存储目录
    • Docker笔记之修改默认网段
    • docker磁盘或者镜像清理相关内容
    • centos镜像添加chrome浏览器以及中文字体
    • 利用buildx构建支持多CPU架构平台的docker镜像
      • 启用 buildx 插件
        • 从默认的构建器切换到多平台构建器
      • 基于 Dockerfile 构建
    • docker exec命令中含有通配符执行失败的问题
    • Docker 调试构建失败的 Dockerfile 的方法
    • Docker容器如何优雅地访问宿主机网络
  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • Docker
二丫讲梵
2022-05-17
目录

利用buildx构建支持多CPU架构平台的docker镜像

文章发布较早,内容可能过时,阅读注意甄别。

准备给开源项目做一个镜像,由于当前使用的是 M1 型号的 Mac 电脑,打出来的镜像无法运行在 AMD 架构之上,但是在 dockerhub 上又见过一些比较大的项目的镜像,支持多平台,因此就了解了一波,本文记录一下实操过程。

在 docker 官方文档中,也有对这块儿内容的讲解,参考: Leverage multi-CPU architecture support (opens new window)

核心点是:Docker 在 19.03 版本引入了构建插件 buildx (opens new window) ,可以很轻松地构建多平台 Docker 镜像。

# 启用 buildx 插件

使用之前确保自己的 docker 版本不低于 19.03,通过如下方式查看自己的 docker 版本:

$ docker -v
Docker version 20.10.13, build a224086
1
2

启用 buildx 插件:

export DOCKER_CLI_EXPERIMENTAL=enabled
1

验证是否开启:

$ docker buildx version
github.com/docker/buildx v0.8.1 5fac64c2c49dae1320f2b51f1a899ca451935554
1
2

使用桌面版的 docker 已经提供 binfmt_misc 多架构支持,这意味着您可以为不同的 Linux 架构运行容器,例如 arm、mips、ppc64le 甚至 s390x,因此不需要再单独配置。

# 从默认的构建器切换到多平台构建器

Docker 默认会使用不支持多 CPU 架构的构建器,我们需要手动切换。

先创建一个新的构建器:

$ docker buildx create --use --name mybuilder
1

然后启动构建器:

$ docker buildx inspect mybuilder --bootstrap
[+] Building 32.6s (1/1) FINISHED
 => [internal] booting buildkit                                                                                                           32.5s
 => => pulling image moby/buildkit:buildx-stable-1                                                                                        31.8s
 => => creating container buildx_buildkit_mybuilder0                                                                                       0.7s
Name:   mybuilder
Driver: docker-container

Nodes:
Name:      mybuilder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
1
2
3
4
5
6
7
8
9
10
11
12
13

查看当前使用的构建器支持的 CPU 架构:

$ docker buildx ls
NAME/NODE       DRIVER/ENDPOINT             STATUS  PLATFORMS
mybuilder *     docker-container
  mybuilder0    unix:///var/run/docker.sock running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
desktop-linux   docker
  desktop-linux desktop-linux               running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default         docker
  default       default                     running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
1
2
3
4
5
6
7
8

申明

原创文章eryajf,未经授权,严禁转载,侵权必究!此乃文中随机水印,敬请读者谅解。

Copyright 二丫讲梵 (opens new window) 版权所有

# 基于 Dockerfile 构建

我们准备好项目的 Dockerfile,并做好 dockerhub 的认证,然后开始构建镜像,并直接推送到 dockerhub。

$ docker buildx build -t eryajf/go-ldap-admin --platform=linux/arm64,linux/amd64 . --push
1

此时来到 dockerhub 中看这个镜像,也能看到多平台支持的标识了:

我们也可以通过命令行查看每个镜像的信息:

$ docker buildx imagetools inspect eryajf/go-ldap-admin
Name:      docker.io/eryajf/go-ldap-admin:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:e70c93a079f64bf3b11beb5bb5c3365d521ab150ceaccc5c0318ccc94945aa48

Manifests:
  Name:      docker.io/eryajf/go-ldap-admin:latest@sha256:af9f6c43744850e8430124cfa2a3d7faaa998b31e0db500e8e005d7916e3bec2
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm64

  Name:      docker.io/eryajf/go-ldap-admin:latest@sha256:fcf385c734aaf1d7ee9ebc69925f457c6fae5c84df9beffb354b875b0cfc7409
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/amd64
1
2
3
4
5
6
7
8
9
10
11
12
13

当我们在使用并拉取这个镜像的时候,docker 会根据 CPU 架构拉取匹配的镜像。

  • 参考:
    • https://docs.docker.com/desktop/multi-arch/ (opens new window)
    • https://cloud.tencent.com/developer/article/1543689 (opens new window)
微信 支付宝
上次更新: 2024/09/26, 21:41:44
centos镜像添加chrome浏览器以及中文字体
docker exec命令中含有通配符执行失败的问题

← centos镜像添加chrome浏览器以及中文字体 docker exec命令中含有通配符执行失败的问题→

最近更新
01
记录二五年五一之短暂回归家庭
05-09
02
学习周刊-总第210期-2025年第19周
05-09
03
学习周刊-总第209期-2025年第18周
05-03
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式