在服务器上使用Docker buildx构建适用于jetson(linux/arm64/v8)平台的镜像

本文主要是介绍在服务器上使用Docker buildx构建适用于jetson(linux/arm64/v8)平台的镜像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Docker buildx构建适用于jetson(linux/arm64/v8)平台的镜像

  • 1 背景
  • 2 创建镜像
    • 2.1 启用Buildx
    • 2.2 修改Dockerfile
    • 2.3 构建镜像
    • 2.4 运行容器
    • 2.5 apt配置国内源
    • 2.6 更换cudnn
    • 2.7 容器生成新镜像
    • 2.8 镜像导出成tar包
    • 2.9 jetson加载镜像

1 背景

该镜像内置了deepface人脸识别功能

在服务器上构建好的镜像,在jetson上加载该镜像时出现平台不匹配问题WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64/v8) and no specific platform was requested.
原因:

dockers镜像的系统架构类型和主机(虚拟机)的系统架构类型不一样。

Docker 提供了一种名为 Buildx 的功能,它允许在不同的平台上进行多架构构建。因此考虑使用 Buildx 在 amd64 平台上构建适用于 linux/arm64/v8 平台的 Docker 镜像。

#查看服务器系统架构
ubuntu@ubuntu-server:~$ uname -m
x86_64
ubuntu@ubuntu-server:~$ dpkg --print-architecture
amd64
#查看jetson系统架构
nvidia@ubuntu:~$ uname -m
aarch64
#查看jetson操作系统位数
nvidia@ubuntu:~$ dpkg --print-architecture
arm64

2 创建镜像

2.1 启用Buildx

确保Docker 安装中已启用 Buildx。可以运行以下命令来检查:

ubuntu@ubuntu-server:~$ docker buildx version
github.com/docker/buildx v0.8.1-docker 5fac64c2c49dae1320f2b51f1a899ca451935554
#如果输出如上字样或者包含 "multi-platform" 或 "builder" 字样,那么 Buildx 已启用。否则,需要确保 Docker 版本符合要求,并启用实验性功能。

2.2 修改Dockerfile

在使用前文Docker部署深度学习项目(cuda11.2+cudnn8.8+deepface)的Dockerfile构建镜像时,buildx提示无法找到waf/mllab镜像,出现了Docker buildx 无法找到本地 docker 镜像的问题(待解决)。
因此修改Dockerfile内容如下:

#base image
#FROM python:3.8
#修改基础镜像,因为要使用gpu
FROM nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04
LABEL org.opencontainers.image.source https://github.com/serengil/dee

这篇关于在服务器上使用Docker buildx构建适用于jetson(linux/arm64/v8)平台的镜像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743065

相关文章

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Linux之UDP和TCP报头管理方式

《Linux之UDP和TCP报头管理方式》文章系统讲解了传输层协议UDP与TCP的核心区别:UDP无连接、不可靠,适合实时传输(如视频),通过端口号标识应用;TCP有连接、可靠,通过确认应答、序号、窗... 目录一、关于端口号1.1 端口号的理解1.2 端口号范围的划分1.3 认识知名端口号1.4 一个进程

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Linux权限管理与ACL访问控制详解

《Linux权限管理与ACL访问控制详解》Linux权限管理涵盖基本rwx权限(通过chmod设置)、特殊权限(SUID/SGID/StickyBit)及ACL精细授权,由umask决定默认权限,需合... 目录一、基本权限概述1. 基本权限与数字对应关系二、权限管理命令(chmod)1. 字符模式语法2.

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3