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.04

COPY main  /app/main

WORKDIR /app

CMD ["/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 使用创建的构建器实例作为当前的构造器

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

建堆的时间复杂度和堆排序

文章目录 建堆的时间复杂度向下调整建堆向上调整建堆 堆排序实现 建堆的时间复杂度 下面都以建大堆演示 向下调整建堆 void Adjustdown(HPDataType* a, int size,int parent) {int child parent * 2 1;while (child < size){if (child1<size&&a[child 1] &…

【shell】正则表达式和AWK

一.正则表达式 通配符匹配文件&#xff08;而且是已存在的文件&#xff09; 基本正则表达式扩展正则表达式 可以使用 man 手册帮助 正则表达式&#xff1a;匹配的是文章中的字符 通配符&#xff1a;匹配的是文件名 任意单个字符 1.元字符&#xff08;字符匹配&…

【2023CANN训练营第二季】——Ascend C算子调用及实验演示

自定义算子调用方式 完成自定义算子的开发部署后&#xff0c;可以通过单算子调用的方式来验证单算子的功能。单算子调用有API执行和模型执行两种方式&#xff1a; 单算子API执行&#xff1a;基于C语言的API执行算子&#xff0c;无需提供单算子描述文件进行离线模型的转换&…

IDEA性能优化的相关配置

有时候会发现idea用起来特别卡&#xff0c;你会发现不是整个电脑卡&#xff0c;而是idea用起来卡。这时候就需要对idea做一下性能优化了。 首先我们把idea的内存调出来&#xff1a;可以右击idea底部然后点这个Memory Indicator&#xff0c;然后就能看到idea使用的内存了。 为什…

传统算法:使用 Pygame 实现选择排序

使用 Pygame 模块实现了选择排序的动画演示。首先,它生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。接着,通过选择排序算法对数组进行排序,动画效果可视化每一步的排序过程。在排序的过程中,程序找到未排序部分的最小元素,并将其与未排序部分…

wyler水平仪维修WYLER倾角仪维修CH-8405

瑞士WYLER电子水平仪维修&#xff1b;BIueCLINO倾斜度测量仪维修&#xff1b;wyler电子倾角仪维修。 水平仪常见故障及处理方法 1、 仪表通电不工作。 A、检查仪表220V电源端子接线是否正确 B、检查仪表电容是否熔断&#xff1b; C、拧下仪表后的固定螺钉&#xff0c;将表…

群晖NAS配置之搭建WordPress个人博客站点

群晖NAS配置之搭建WordPress个人博客站点 之前写了一些ngrok和frp给群晖nas做内网穿透&#xff0c;今天分享一下在群晖nas下安装wordpress的教程。 WordPress是一个开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;最初是用来搭建博客的&#xff0c;但后来发展成为…

transformer模型和Multi-Head Attention

参考英文文献&#xff1a; Understanding and Coding the Self-Attention Mechanism of Large Language Models From Scratch Transformer Block 弄懂Transformer Layer 和Transformer Block的关系后&#xff0c;豁然开朗_MengYa_DreamZ的博客-CSDN博客 https://www.tensorf…

RocketMQ-RocketMQ快速实战及集群原理

一、MQ简介 ​ MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联网中使用非常广泛的一系列服务中间件。 这个词可以分两个部分来看&#xff0c;一是Message&#xff1a;消息。消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上&#xff0c;也可以分布…

seata集成springboot的一些错误小计

1 seata依赖没找到 dependencies.dependency.version for com.alibaba.cloud:spring-cloud-starter-alibaba-seata:jar is missing. line 126, column 21错误原因:未指定具体的seata版本 解决 <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-st…

Echarts 柱状图添加标记 最大值 最小值 平均值

标记 最大值 最小值 series: [//图表配置项 如大小&#xff0c;图表类型{name: 图例,type: bar,//图表类型data: [{value: 500,time: 2012-11-12},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}] …

魔珐科技:3D虚拟人AIGC原生产品,助力全新商业机遇

11月28日-29日&#xff0c;WISE2023 商业之王大会在北京国际会议中心成功举办。此次大会以“太阳照常升起&#xff08;The Sun Always Rises&#xff09;”为主题&#xff0c;活动汇聚了全商业领域知名企业&#xff0c;围绕前沿趋势&#xff0c;共话商业创新之策。 在本次论坛…

基于Python Flask 的全流程全栈项目自己的实战心得

我基于Python Flask框架开发全流程全栈项目的实战经验和心得。我将介绍整个项目的架构设计、前后端交互、数据库管理以及部署等方面&#xff0c;并提供具体的代码示例。通过这个实例项目&#xff0c;你将学习到如何使用Flask构建一个完整的Web应用&#xff0c;并了解一些常见的…

设计循环队列

目录 设计循环队列 &#x1f642;【1】数组循环队列 思路分析 ❓1 ❓2 ❓3 易错总结 创建MyCircularQueue 初始化myCircularQueueCreate 为空否myCircularQueueIsEmpty 为满否myCircularQueueIsFull 插入元素myCircularQueueEnQueue 删除元素myCircularQueueDeQue…

[原创][3]探究C#多线程开发细节-“用ConcurrentQueue<T>解决多线程的无顺序性的问题“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

C++17那些事开篇之类模版参数推导(CTAD)

C17那些事开篇之类模版参数推导(CTAD) 引入 大家好&#xff0c;我是光城&#xff0c;今天开始正式开篇C17的新特性了&#xff0c;期待不&#xff0c;欢迎留言区说出想要更新的特性呀&#xff5e; C模板元编程一直是C开发者们熟知的一项功能&#xff0c;无论是初学者还是高级开发…

java springboot通过application配置文件生成随机值并控制范围

我们找到 项目的 application 配置文件 这里我们还是习惯用 yml格式的 我们在配置文件中 写出 ${random.} 的时候 他就会将所有可配置的随机类型都提示出来了 有 整数 长整星 字符串 uuid 这里 我们来个模板 testcase:book:id: ${random.int}name: ${random.value}date: ${r…

kubernetes(K8s)(Namespace、Pod、Deployment、Service资源的基本操作)-04

Namespace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下&#xff0c;kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中&#xff0c;可能不想让两个Pod之间进行互相的…

智跃人力资源管理系统 SQL注入漏洞复现

0x01 产品简介 智跃人力资源管理系统是基于B/S网页端广域网平台&#xff0c;一套考勤系统即可对全国各地多个分公司进行统一管控&#xff0c;成本更低。信息共享更快。跨平台&#xff0c;跨电子设备 0x02 漏洞概述 智跃人力资源管理系统GenerateEntityFromTable.aspx接口处存在…

机器人RL数据集探索

机器人RL数据集探索 相关资料汇总 相关资料汇总