docker buildx跨架构构建笔记(x86_64构建下构建aarch64镜像)

docker buildx跨架构构建(x86_64构建aarch64镜像)

文章目录

  • docker buildx跨架构构建(x86_64构建aarch64镜像)
    • 简介
    • 第一步 先交叉编译一个aarch64的HelloWorld程序。
    • 准备一个用于跨架构的Dockerfile文件
    • 使用docker buildx命令构建aarch64架构的镜像。
    • 查看镜像具体详细信息(确定镜像是ARM架构)
    • 测试(通过)
    • 小技巧(避免每次下载aarch64架构的基础镜像)

简介

Docker Buildx 是 Docker 团队为 Docker 引擎设计的一个工具,用于支持构建和管理多平台的容器镜像。它扩展了 Docker 构建工具,使得可以跨多个不同的架构和操作系统进行构建。

第一步 先交叉编译一个aarch64的HelloWorld程序。

在这里插入图片描述

准备一个用于跨架构的Dockerfile文件

vi Dockerfile

FROM ubuntu:20.04COPY main  /app/mainWORKDIR /appCMD ["/app/main"]

使用docker buildx命令构建aarch64架构的镜像。

docker buildx build --platform linux/arm64 -t test:0.1 --load .

# root @ liuyuelong-System-Product-Name in ~/workspace/cross_test/src/main on git:master x [17:28:46] 
$ docker buildx build --platform linux/arm64 -t aarch64_images:1.0 --load .
[+] Building 3.4s (9/9) FINISHED                                                                                docker-container:elegant_davinci=> [internal] load build definition from Dockerfile                                                                                        0.0s=> => transferring dockerfile: 111B                                                                                                        0.0s=> [internal] load .dockerignore                                                                                                           0.0s=> => transferring context: 2B                                                                                                             0.0s=> [internal] load metadata for docker.io/library/ubuntu:20.04                                                                             2.8s=> [internal] load build context                                                                                                           0.0s=> => transferring context: 14.27kB                                                                                                        0.0s=> CACHED [1/3] FROM docker.io/library/ubuntu:20.04@sha256:ed4a42283d9943135ed87d4ee34e542f7f5ad9ecf2f244870e23122f703f91c2                0.0s=> => resolve docker.io/library/ubuntu:20.04@sha256:ed4a42283d9943135ed87d4ee34e542f7f5ad9ecf2f244870e23122f703f91c2                       0.0s=> [2/3] COPY main  /app/main                                                                                                              0.0s=> [3/3] WORKDIR /app                                                                                                                      0.0s=> exporting to oci image format                                                                                                           0.3s=> => exporting layers                                                                                                                     0.2s=> => exporting manifest sha256:9354e37bfcc69a2408f10323d76afaa40e96fb04f5ef6260d23ca6f17ec86dad                                           0.0s=> => exporting config sha256:a858b4c183e0ebdc2e8b217c5557e1f3fb3aebc3df98a0f8cfd5b68673005052                                             0.0s=> => sending tarball                                                                                                                      0.1s=> importing to docker                                                                                                                     0.0s# root @ liuyuelong-System-Product-Name in ~/workspace/cross_test/src/main on git:master x [17:31:22] 
$ docker images | grep aarch64_images
aarch64_images                                    1.0               a858b4c183e0   43 seconds ago      65.7MB

查看镜像具体详细信息(确定镜像是ARM架构)

# root @ liuyuelong-System-Product-Name in ~/workspace/cross_test/src/main on git:master x [17:32:10] 
$ docker inspect aarch64_images:1.0
[{"Id": "sha256:a858b4c183e0ebdc2e8b217c5557e1f3fb3aebc3df98a0f8cfd5b68673005052","RepoTags": ["aarch64_images:1.0"],"RepoDigests": [],"Parent": "","Comment": "buildkit.dockerfile.v0","Created": "2023-11-30T09:31:22.44138137Z","Container": "","ContainerConfig": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": null,"Cmd": null,"Image": "","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": null},"DockerVersion": "","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/app/main"],"ArgsEscaped": true,"Image": "","Volumes": null,"WorkingDir": "/app","Entrypoint": null,"OnBuild": null,"Labels": {"org.opencontainers.image.ref.name": "ubuntu","org.opencontainers.image.version": "20.04"}},"Architecture": "arm64","Os": "linux","Size": 65692279,"VirtualSize": 65692279,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/31cdebbee3d9a5cb5222804c1ca5759ce9d9dacc1aa94c9ff5317fe13989aca1/diff","MergedDir": "/var/lib/docker/overlay2/6c1bad2064ca4947f86e3a9438c25e7c926cb7d4d65c3cececcd0ce7236ec3cc/merged","UpperDir": "/var/lib/docker/overlay2/6c1bad2064ca4947f86e3a9438c25e7c926cb7d4d65c3cececcd0ce7236ec3cc/diff","WorkDir": "/var/lib/docker/overlay2/6c1bad2064ca4947f86e3a9438c25e7c926cb7d4d65c3cececcd0ce7236ec3cc/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:701ccb11c0525a289459678e1ef3e9269b62737fafb033db91061ae53a0e9c1e","sha256:2ebde9a9a90f240d14d223cb6d6ac61e209f0e871973ceb6c421b3b0569c09d8"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}}
]

"Architecture": "arm64", 架构没有问题

测试(通过)

导出镜像
docker save aarch64_images:1.0 -o aarch64_images.img
在aarch64架构下安装镜像
docker load -i aarch64_images.img
运行测试

# docker run --rm aarch64_images:1.0
Hello World!

测试通过

小技巧(避免每次下载aarch64架构的基础镜像)

docker buildx create --use
create => Create a new builder instance 创建一个新的构造器实例
–use => Set the current builder instance 使用创建的构建器实例作为当前的构造器

创建实例后,如果使用的话,构造器就会被激活,并以容器的形式运行,在这个容器中,在构建过程中下载的基础镜像会被保存在容器中,再次构建,不需要重新下载基础镜像。

也可以使用命令管理构造器
在这里插入图片描述

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

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

相关文章

Linux常用命令——vi命令

文章目录 vi的工作模式常用快捷键提示和技巧结论 Linux环境下的vi编辑器不仅以其强大的功能著称,也因其快捷键而闻名。这些快捷键可以显著提高编辑效率,是每个使用vi的人必须掌握的。下面将扩展介绍vi的一些常用快捷键。 vi的工作模式 vi主要有两种模式…

【机器学习】线性模型之逻辑回归

文章目录 逻辑回归Sigmoid 函数概率输出结果预测值与真实标签之间的并不匹配交叉熵逻辑回归模型 梯度下降逻辑回归模型求解编程求解sklearn 实现,并查看拟合指标 逻辑回归 逻辑回归是一种广义线性模型,形式上引入了 S i g m o i d Sigmoid Sigmoid 函数…

Windows10中在Visual Studio2017中VC++项目安装使用GoogleTest库

Windows10中在Visual Studio2017中VC项目安装使用GoogleTest库 在Windows10中VC程序中可以不用自己手动下载GoogleTest源代码,可以直接通过【项目】-> 【管理 NuGet 程序包】-> 【浏览】-> 搜索 googletest, 找到Microsoft.googletest.v140.wi…

物联网实训室虚拟仿真软件建设方案

一、概述 物联网实训室虚拟仿真软件旨在紧密围绕立德树人的根本任务,充分依托先进的数字技术,并对接物联网行业的发展趋势和人才需求。通过对比真实企业工作环境,融合创新创业教育基因,秉承虚拟仿真技术与教育教学深度融合的理念&…

流批一体历史背景及基础介绍

目录 一、历史背景1.BI系统2.传统大数据架构3.流式架构4.Lambda架构5.Kappa架构 二、流批一体与数据架构的关系数据分析型应用数据管道型应用 三、流与批的桥梁Dataflow模型四、Dataflow模型的本质一个基本点两个时间域三个子模型1.窗口模型2.触发器模型3. 增量计算模型 四个分…

Netty Review - 探索Pipeline的Inbound和Outbound

文章目录 概念Server CodeClient CodeInboundHandler和OutboundHandler的执行顺序在InboundHandler中不触发fire方法InboundHandler和OutboundHandler的执行顺序如果把OutboundHandler放在InboundHandler的后面,OutboundHandler会执行吗 概念 我们知道当boss线程监控…

自学MySql(一)

1.安装下载 下载网址 2、将mysql的bin目录添加到环境变量(可选) 3、使用一下命令测试

GAN:WGAN前作

WGAN前作:有原则的方法来训练GANs 论文:https://arxiv.org/abs/1701.04862 发表:ICLR 2017 本文是wgan三部曲的第一部。文中并没有引入新的算法,而是标是朝着完全理解生成对抗网络的训练动态过程迈进理论性的一步。 文中基本是…

文心一言 VS 讯飞星火 VS chatgpt (146)-- 算法导论12.2 1题

一、用go语言,假设一棵二叉搜索树中的结点在1到 1000 之间,现在想要查找数值为 363 的结点。下面序列中哪个不是查找过的序列? a.2,252,401,398,330,344,397,363。 b.9…

ps 透明印章制作

ps 透明印章制作 1、打开不透明印章2、抠出红色印章3、新建图层4、填充红色印章到新图层5、导出透明印章 1、打开不透明印章 打开ps软件,菜单栏选择 文件-打开 选择本地不透明印章 打开 2、抠出红色印章 ps菜单栏 选择 选择-色彩范围 点击色彩范围 色彩范围窗口 取…

内网协议区别

今天面试的时候被面试官问到内网隧道技术中的协议有什么区别,平时只注重使用不注重原理,学习记录 2023-11-30 网络层:IPV6 隧道、ICMP 隧道、GRE 隧道 传输层:TCP 隧道、UDP 隧道、常规端口转发 应用层:SSH 隧道、HTTP…

基于B/S架构的医院一体化电子病历编辑器源码

电子病历在线制作、管理和使用的一体化电子病历解决方案,通过一体化的设计,提供对住院病人的电子病历书写、保存、修改、打印等功能。电子病历系统将临床医护需要的诊疗资料以符合临床思维的方法展示。建立以病人为中心,以临床诊疗信息为主线…

使用 SDKMAN 管理多版本本地 Java 环境---Centos8 Windows

文章目录 windows 安装centos8 安装卸载sdkman使用 windows 安装 SDKMAN是一个 jdk 多版本管理工具,类似于 nodejs 中的 nvm。可以在本地存在多个 java 环境,快速切换功能,同时,他不止于 java sdk,还有maven、tomcat等…

算法:双指针

数组分块 题型特点:给一个数组,在某个规则下将数组划分成几个区间 解决:双指针(数组中利用下标充当指针) 283 移动0 定义两个指针 dest指针(已处理区间内非0元素的最后一个位置)cur指针&#…

Memcached最新2023年面试题,高级面试题及附答案解析

文章目录 01、Memcached是什么,有什么作用?02、Memcached的多线程是什么?如何使用它们?03、Memcached与Redis的区别?04、如果缓存数据在导出导入之间过期了,怎么处理这些数据呢?05、如何实现集群…

mysql中字符串截取与拆分

按分隔符把字符串拆成多行 引言截取字符串一、left(str,length)二、right(str,length)三、截取特定长度的字符串四、按分隔符截取 分割字符串一、分割成多列二、分割成多行 总结 引言 截取和拆分字符串在编程生涯中是普遍存在的,在sql中也不例外,下面就…

树与二叉树堆:经典OJ题集

目录 查找值为x的结点: 思路分析: 单值二叉树: 示例: 思路分析: 相同的树: 示例: 思路分析: 二叉树的前序遍历:——使用前序遍历把结点元素放入数组中 题…

塑料注塑件自动化光学测量蓝光自动化三维检测解决方案-CASAIM-IS(2ND)

一、背景介绍 在塑料制品的生产过程中,注塑件的质量对于产品的整体质量和性能至关重要。然而,通过使用三坐标、卡尺、千分尺等量具,对工件进行单点或人工检测其加工精度,对复杂形位公差检测目前比较难取得数据,无法快…

力扣11题 盛最多水的容器 双指针算法

11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明 你不能倾斜容器. 示…

React Native环境搭建及Hello World

写这篇博客的目的就是想说,react native 挺简单,但是大部分初级前端会被环境搭建给难住,从而放弃. 环境搭建 环境搭建其实说简单也挺简单的,有经验的前端直接翻看react native中文文档就行,直接按上面来肯定没错 以下以安卓开发,windows配置环境为例,来演示一遍 首先 电脑…