Docker构建多平台镜像

docker的多架构镜像构建
目前很多服务器都是基于arm架构的,而现在大多数的docker镜像都是基于x86架构的。一种情况就是同样的代码编译成业务包做成镜像需要部署在不同架构的服务器上,这个时候我们就可以使用docker的多平台构建了。
以下操作是在centos7.9系统上完成(x86_64位)
注意要使用docker的多架构镜像构建功能linux内核需要大于4.19才行,如下图,我的centos系统的内核为5.4.278
image.png
如果不是4.19及以上的内核,请升级linux内核,centos7系统可以参考此文章升级内核:https://blog.csdn.net/pky86676022/article/details/139870965

一、启用docker buildx插件

Docker Buildx 是 Docker的CLI插件,来自于Moby BuildKit 。你的docker版本不能低于19.10使用docker version命令查看docker版本
image.png
我的docker版本是26.1.4符合要求,下面启用docker buildx功能:
编辑docker的配置文件 **vim /etc/docker/daemon.json **在配置文件中新增如下标签对:
“experimental”: true ,
image.png
重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

检查docker buildx版本:

 docker buildx version

image.png
在当前的x86_64架构的机器上运行一个特权 Docker 容器启用 binfmt_misc 来运行非x86架构的 Docker 镜像

docker run --rm --privileged  docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64-amd64

image.png
运行如下命令检查是否其支持arm64架构的编译工作了

ls -al /proc/sys/fs/binfmt_misc/

image.png
接下来创建一个新的支持多架构的构建器。

docker buildx create --use --name mybuilder
docker buildx inspect mybuilder --bootstrap
docker update --restart=always buildx_buildkit_mybuilder0

检查这个构建器

docker buildx ls

image.png
如图,这个构建器可以构建linux/amd64和linux/arm64的镜像

二、写一个Dockerfile,尝试构建多架构镜像并推送到仓库中

先登录我的私服仓库,等下把多架构镜像推送到这里
image.png
我这里以制作一个Java运行环境的镜像为例演示。
vim Dockerfile

# 制作一个Java基础镜像
FROM alpine:3.18.7
LABEL maintainer="pkyit"
RUN apk add --no-cache openjdk8-jre tzdata curl
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone

image.png
运行如下命令构建多架构镜像:

docker buildx build  \
-t registry.cn-hangzhou.aliyuncs.com/pkyit/jre8:alpine3.18.7 \
-f Dockerfile .  \
--platform linux/amd64,linux/arm64 --push

image.png

三、验证

等待片刻,显示已经构建了linux下的amd64和arm64的2个镜像并且推送到阿里云的私服仓库中了。
image.png
image.png
不妨把arm64架构的镜像拉取下来验证一下看看是不是arm64架构的:

# 拉取指定架构的镜像
docker pull --platform=linux/arm64 registry.cn-hangzhou.aliyuncs.com/pkyit/jre8:alpine3.18.7
# 检查指定镜像的架构
docker inspect  registry.cn-hangzhou.aliyuncs.com/pkyit/jre8:alpine3.18.7 | grep Architecture

image.png
以上就是docker多架构构建镜像的全部流程。

参考以下链接:
https://blog.csdn.net/tanjunchen/article/details/124060471
https://blog.csdn.net/weixin_43403660/article/details/125974212
https://blog.csdn.net/m0_70748381/article/details/126865574
如果我的文章对您有帮助,还请您多多支持我。支付宝帮忙扫一下吧
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/33013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组、正则表达式、排序

数组 定义:在集合当中指定多个元素,元素的类型可以是整数也可以是字符串,也可以是浮点。 作用:可以一次性定义多个元素,可以为变量赋值提供便利。 数组的定义方法: 数组名 (a b c&#xff0…

深入探索 Nuxt3 Composables:掌握目录架构与内置API的高效应用

title: 深入探索 Nuxt3 Composables:掌握目录架构与内置API的高效应用 date: 2024/6/23 updated: 2024/6/23 author: cmdragon excerpt: 摘要:“本文深入探讨了Nuxt3 Composables,重点介绍了其目录架构和内置API的高效应用。通过学习本文&…

pcl::PointXYZRGBA造成点云无法显示

如果pcd文件没有rgba信息,使用pcl::PointXYZRGBA类型打开会提示以下信息: Failed to find match for field rgba另外,显示出来的点云是黑色,如果使用默认背景色为黑色,就无法显示点云了。 如果设置其它背景色&#xf…

服务器防御ddos攻击

硬件层面: 1、高性能防火墙能有效过滤ddos攻击,可以有效的提高网络的抗攻击能力 2、使用流量清洗设备(或者ddos防护设备)可以过滤攻击流量,可以保护网站和服务器正常运行 软件层面: 1、 隐藏服务器真实IP 2…

命名冲突常见的领域

命名冲突确实是指在不同的来源或上下文中,同一实体(可以是对象、变量、函数、类、文件等)具有不同的名称。 在编程中,命名冲突可能发生在以下情况: 变量和函数重名:在不同的作用域或模块中,变量…

视频监控平台:支持交通部行业标准JT/T905协议(即:出租汽车服务管理信息系统)的源代码的函数和功能介绍及分享

目录 一、视频监控平台介绍 (一)概述 (二)视频接入能力介绍 (三)功能介绍 二、JT/T905协议介绍 (一)概述 (二)主要内容 1、设备要求 2、业务功能要求…

[最全]设计模式实战(一)UML六大原则

UML类图 UML类图是学习设计模式的基础,学习设计模式,主要关注六种关系。即:继承、实现、组合、聚合、依赖和关联。 UML类图基本用法 继承关系用空心三角形+实线来表示。实现接口用空心三角形+虚线来表示。eg:大雁是最能飞的,它实现了飞翔接口。 关联关系用实线箭头来表示…

OOM日志分析

目录 1. 日志分析2. MAT 工具2.1 日志打印方式2.1.1 HeapDumpOnOutOfMemoryError(推荐)2.1.2 jmp 命令 2.2 MAT分析方式2.2.1 饼图分析2.2.2 树形图分析2.2.2 泄漏疑点 3. 优化 首先说一下结论:通过MAT工具分析才是最精准的,直接通…

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里: https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案,而是为了帮助大家梳理 transformer的相关知识点,所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在…

微信小程序建议录音机

在小程序中实现录音机功能,可以通过使用小程序提供的wx.getRecorderManager() API来获取录音管理对象,然后使用这个对象的start()方法来开始录音,使用stop()方法来停止录音,并使用onStop()方法来监听录音的结束。以下是一个简单的…

Spring响应式编程之Reactor核心接口

响应式流的核心接口 核心接口包括&#xff1a;Publisher<T>、Subscriber<T>、Subscription 和 Processo<T,R> &#xff08;1&#xff09;Publisher<T> Publisher接口代表数据流的生产者&#xff0c;根据收到的请求向Subscriber发布数据。接口定义如…

C语言中的字符输入/输出和验证输入

在C语言中&#xff0c;字符输入/输出功能允许程序与用户进行交互&#xff0c;读取用户的输入信息并展示输出结果。同时&#xff0c;验证输入的作用在于确保用户输入的数据符合预期&#xff0c;以提高程序的稳定性和可靠性&#xff0c;防止无效输入引发的错误或异常行为&#xf…

JavaWeb——MySQL:DDL操作库

目录 1.DDL&#xff1a;查询数据库&#xff1b; 1.1 查询数据库 1.2 创建数据库 1.DDL&#xff1a;查询数据库&#xff1b; 具体操作&#xff1a;增 删 查 用 &#xff1b; 1.1 查询数据库 SQL语句&#xff1a;show databases; 由于我创建过一些数据库&#xff0c;我查询的…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…

计算机专业:昔日万金油,明日科技潮头的弄潮儿

高考后的十字路口&#xff1a;计算机专业&#xff0c;依旧闪耀吗&#xff1f; 随着2024年高考的尘埃落定&#xff0c;数百万青春洋溢的脸庞再次凝视着未来的迷雾&#xff0c;试图在繁星点点的专业宇宙中找到那颗最亮的星——计算机科学与技术。长久以来&#xff0c;计算机专业…

【408考点之数据结构】特殊矩阵压缩存储的代码实现

特殊矩阵压缩存储的代码实现 为了更好地理解特殊矩阵的压缩存储&#xff0c;下面提供一些C语言的代码示例&#xff0c;展示如何实现这些矩阵的压缩存储和操作。 1. 稀疏矩阵的三元组表示 #include <stdio.h>#define MAX_TERMS 100typedef struct {int row;int col;int…

Java 比较器

Java 比较器 文章目录 Java 比较器自然排序java.lang.Comparable对象排序java.util.Comparator两种方式的对比 基本数据类型&#xff0c;可以直接使用比较运算符进行比较&#xff0c;但引用数据类型不能直接通过运算符进行比较运算。 实现对象的排序&#xff0c;可以考虑两种方…

【目标检测】DAB-DETR

一、引言 论文&#xff1a; DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR 作者&#xff1a; IDEA 代码&#xff1a; DAB-DETR 注意&#xff1a; 该算法是对DETR的改进&#xff0c;在学习该算法前&#xff0c;建议掌握多头注意力、Sinusoidal位置编码、DETR等相…

Android jetpack Room的简单使用

文章目录 项目添加ksp插件添加 room 引用开始使用room1. 创建bean2. 创建 dao类3. 创建database类 数据库升级复制数据库到指定路径参考文献 项目添加ksp插件 注意&#xff0c;因为ksp插件 是跟项目中使用的kotlin的版本要保持一致的&#xff0c;否则会报错的 首先我们去 https…

【06】数据模型和工作量证明-工作量证明

1. 工作量证明的背景 比特币是通过工作量证明来竞争记账权,并获得比特币奖励。简单来讲就是谁能够根据区块数据更快的计算得到满足条件的哈希值,谁就可以胜出,这个块才会被添加到区块链中。我们把这个过程称为挖矿。比特币每10分钟产生1个区块。 2. 工作量证明算法 1. 获…