Docker安装、入门及VSCode链接(地平线OE docker镜像)

最近在地平线的SDK X3上做开发,有高手做了一些编译方法的对比:
[X3容器应用开发探索-0]开篇:从裸机编译到交叉编译
X86 Qemu for Hobot X3 PI(AARCH64) vs Hobot X3 PI

这里想借助Docker编译提速,做个笔记:

目录

  • 一、Docker 安装
  • 二、系统镜像载入
    • 2.1 ISO系统镜像转Docker镜像
    • 2.2 Docker镜像载入
      • 针对地平线提供的docker镜像 --docker_openexplorer_ubuntu_20_xj3_gpu_v2.6.2b.tar.gz
    • 2.3 直接拉取Ubuntu20 arm64镜像
      • 重要!!!
    • 2.4 删除Docker镜像
  • 三、安装VSCode插件
    • 文件传输
  • 四、Docker加速
  • 五、错误解决

一、Docker 安装

docker安装(可指定版本)
运行下面命令,查看可安装版本

apt-cache madison docker-ce | awk '{ print $3 }'

目前可以看到最新版是5:24.0.7-1~ubuntu.20.04~focal,地平线建议版本是19.03。

查看Docker版本:

sudo docker version

在这里插入图片描述

Ubuntu还需要设置权限(不然每次运行docker命令前面都加上sudo)

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

二、系统镜像载入

以地平线针对X3的镜像为例。 有两种:

  1. RDK X3的系统镜像: aarch64架构的,板子上用的就是这个了。

  2. 地平线的Docker镜像:x86架构的,编译完不能直接放到X3上用。 这个镜像的目的是使用的地平线提供的深度网络模型部署工具链hb_mapper,该工具链不支持arm。因此建议选GPU Docker:

    wget -c ftp://vrftp.horizon.ai/Open_Explorer_gcc_9.3.0/2.6.2b/docker_openexplorer_ubuntu_20_xj3_gpu_v2.6.2b.tar.gz
    

2.1 ISO系统镜像转Docker镜像

针对RDK X3的系统镜像,直接烧地平线Docker镜像的跳过2.1

没有找到直接将*.iso系统文件转为Docker镜像的,还是得先把RDK X3的系统镜像烧录到板子里,然后在板子上:

切换到根目录
在这里插入图片描述

打包系统

# 直接排除不想打包的目录就行(/proc、/sys、/run、/dev这几个目录都是系统启动时自动生成的,虽然也属于文件系统一部分,但是他们每次开机都会有变化,所以exclude掉)
sudo tar -cvpf /tmp/x3_arm64.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .

将压缩好的系统文件x3_arm64.tar拷贝到装有Docker的PC上去。

ref:
将Linux的系统制作成Docker镜像
Ubuntu将实体机镜像转为docker镜像

2.2 Docker镜像载入

载入刚才IOS转的镜像:

docker import x3_arm64.tar sunrise:2.0
# sunrise:2.0  是自定义的镜像和tag名称

或者 地平线提供的docker镜像:

docker load -i docker_openexplorer_ubuntu_20_xj3_gpu_v2.6.2b.tar.gz

查看系统目前拥有的镜像

docker images

在这里插入图片描述

打开测试下:

docker run -it sunrise:2.0 bash

针对地平线提供的docker镜像 --docker_openexplorer_ubuntu_20_xj3_gpu_v2.6.2b.tar.gz

sudo apt update
sudo apt upgrade

修改 ~/.bashrc, 选择9.3.0 版本的 aarch64-linux-gnu-gcc

# cross compiler
export PATH=$PATH:/opt/gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu/bin

2.3 直接拉取Ubuntu20 arm64镜像

是的,前面两种方法都无法满足我的需求,这是第三种方法了…

Docker默认拉取的是amd的,需要先修改 docker的配置文件,在服务器上开启 dockerd 的实验属性:
为配置文件 /etc/docker/daemon.json,添加 “experimental”: true

修改后的配置文件看起来和下面的比较像:

{
  "experimental": true
}

修改完成后,使用以下命令重置服务:

systemctl daemon-reload
systemctl restart docker

另外因为是异构架构,需要装QEMU模拟器:

sudo apt-get install qemu-user-static

现在拉取镜像

sudo docker pull ubuntu:20.04 --platform linux/arm64

好了,现在我的镜像有四个了…
在这里插入图片描述
你可能也发现了,这个系统也太小了点!!!
运行

docker run -it --platform linux/arm64 -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static ubuntu:20.04 

以下内容可参考第三部分用vscode完成

好了,现在我们开始从零开始装库:

apt update
# 必要的编辑器,gcc
apt install build-essential
apt-get install libboost-all-dev
apt-get install libssl-dev
apt-get install cmake
apt-get install vim # 一般我喜欢用gedit,但,貌似不允许了
apt-get install git 

你可能发现好像少了点什么? 是的,我们已经默认在root,再也用不着sudo了! 你要是不习惯可自行搜索怎么创建用户,然后避免你一开始就有root权限。

现在看看各个库的版本:
在这里插入图片描述
在这里插入图片描述

装opencv

apt-get install libopencv-dev

看下版本

find / -iname "*opencv*"

在这里插入图片描述
也可以尝试用源码安装,然后pkg-config opencv --modversion查看版本。

ref:
如何使用 docker pull 拉取特定架构amd64、arm64、aarch64的容器镜像
docker image ubuntu 20.04 arm64
exec user process caused: exec format error
Ubuntu下查看自己安装的opencv版本号和路径以及使用cmake链接自己路径下的指定opencv版本
ubuntu 安装opencv踩坑记录
在Ubuntu上安装Boost的五种方法(全网最全,建议收藏)

重要!!!

安装完成后一定记得保存,不然下次打开你还得重装一遍!

先查看正在运行的容器

docker ps

在这里插入图片描述
按照ID提交该容器,形成一个新的镜像

#  提交你刚才修改的镜像,新的镜像名称为demo,版本为v1.3。
docker commit 7db69157dfbb sunrise:20

在这里插入图片描述

ref:
Docker 如何保存对容器/镜像的修改
Docker如何重启后数据不丢失,教你挂载数据卷Volume

2.4 删除Docker镜像

查看镜像id

docker images

在这里插入图片描述

docker rmi -f <image_id> 

比如删除刚才ISO镜像转的

docker rmi -f 48ef7609eede

ref:
“image is being used by stopped container” error

三、安装VSCode插件

主要是这两个:
在这里插入图片描述

装好Docker插件后,可以看到本地镜像:
看不到可能是权限不够,要先

sudo usermod -aG docker $USER
newgrp docker
code .

在这里插入图片描述
绿色的是正在运行的。

使用快捷键 Ctrl+Shift+P,打开VS Code的命令输入行,选择Dev Containers: Attach to Running Container…(此时要有运行中的容器才能选择)
在这里插入图片描述
选择想要打开的container就会弹出一个窗口
在这里插入图片描述
现在就与在本地开发无异了!
有个缺点是启动太慢了。

文件传输

本地文件传到docker里直接拖拽即可;

Docker内的文件下载到本地不能直接拖拽,可以右键点击下载到本地:
在这里插入图片描述
命令行的形式:

docker cp <容器名称或ID>:<容器内文件路径> <宿主机目标路径>

查看正在运行的容器ID:

docker ps

ref:
VsCode在Docker中进行开发
VS Code 连接访问本地主机上的Docker容器
通过VScode往docker镜像中传入和下载文件
docker 从容器里拷贝文件

四、Docker加速

现在你又会发现,Docker的编译速度好慢! 并没有比开发板快多少,甚至还能更慢!

如何加速 Docker Build 构建过程

五、错误解决

电脑重启后再运行docker发现出现问题:
在这里插入图片描述
暂时的解决办法(重启后失效):

sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

ref:
启动Docker遇到 cgroups: cgroup mountpoint does not exist: unknown 报错处理

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

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

相关文章

算法刷题笔记 高精度乘法(C++实现)

文章目录 题目描述解题思路解题代码 题目描述 给定两个非负整数&#xff08;不含前导0&#xff09;A和B&#xff0c;请你计算 AB的值。 输入格式 共两行&#xff0c;第一行包含整数 A&#xff0c;第二行包含整数 B。 输出格式 共一行&#xff0c;包含AB的值。 数据范围 …

最新文章合集

GitHub宝藏项目&#xff1a;每天一个&#xff0c;让你的技术库增值不停&#xff01; STORM、SuperMemory、Awesome Chinese LLM、AI写作助手、资料搜集、文章生成、视角问题引导、模拟对话策略、内容导入、浏览器插件、资源库、开源微调模型 开发者必看&#xff1a;Linux终端…

开关电源AC-DC(15W 3-18V可调)

简介: 该模块使用PI的TNY268PN电源芯片制作的开关电源,实现最大功率15W 3-18V可调输出(更改反馈电阻)隔离式反激电源; 简介:该模块使用PI的TNY268PN电源芯片制作的开关电源,实现最大功率15W 3-18V可调输出(更改反馈电阻,现电路图输出5V)隔离式反激电源; 一、产品简…

leecode 1206|跳表的设计

跳表 跳表&#xff0c;一种链表数据结构&#xff0c;其增删改茶的效率能和平衡树相媲美 leecode1206 可以看上面的那个动画&#xff0c;动画效果很贴切。 我简单讲讲它的机制吧&#xff0c;每个节点不单单是一个&#xff0c;测试好几层&#xff0c;然后同一层的节点和统一节点…

力扣96. 不同的二叉搜索树

Problem: 96. 不同的二叉搜索树 文章目录 题目描述思路复杂度Code 题目描述 思路 一个数字做根节点的话可能的结果为&#xff1a;其左边数字做子树的组合数字乘以其右边数字做子树的个数之积 1.创建备忘录memo&#xff1b; 2.递归分别求取当前数字左边和右边数字做子树的数量&…

Putty: 随心御剑——远程启动服务工具plink

一、引言:如何远程控制 也许你会有这样的场景,交互程序(以下简称UI程序)跑在windows端,而控制程序跑在Linux上。我们想要通过windows端 UI程序来启动Linux下面的服务,来一场酣畅淋漓的御剑飞行咋办,难道要自己十年磨一剑,在Linux下编写一个受控服务程序么.计算机科技发…

Stable Diffusion【艺术特效】【霓虹灯】:霓虹灯像素化马赛克特效

提示词 Neon pixelated mosaic of [Subject Description],highly detailed [主题]的霓虹灯像素化马赛克&#xff0c;高度详细 参数设置 大模型&#xff1a;万享XL_超写实摄影V8.2 采样器&#xff1a;Euler a 采样迭代步数&#xff1a;25 CFG&#xff1a;3 反向提示词&#x…

GmSSL3.X编译iOS和Android动态库

一、环境准备 我用的Mac电脑编译&#xff0c;Xcode版本15.2&#xff0c;安卓的NDK版本是android-ndk-r21e。 1.1、下载国密源码 下载最新的国密SDK源码到本地。 1.2、安装Xcode 前往Mac系统的AppStore下载安装最新Xcode。 1.3、安卓NDK下载 下载NDK到本地&#xff0c;选…

微服务可用性之隔离

摘要 ​ 本文主要微服务场景下服务的可用性保障之隔离。隔离又分为几种情况&#xff0c;动静隔离、读写隔离、热点隔离、资源隔离等场景。 为什么要隔离 ​ 本质上是对资源进行分割确保在出现故障的时候服务只是部分不可用&#xff0c;不至于系统陷入整体性瘫痪&#xff0c;…

推特热帖:大语言模型自荐能够替代的20种人类工作!快来看你是否需要转行!

最近推特上有一个例子引起了广泛的讨论&#xff0c;事情的起因是这样的&#xff1a;网友让 GPT-4o 预测一下自己未来将会替代人类哪些工作&#xff1f; 这听起来很有趣&#xff01;GPT-4o会给出什么样的预测呢&#xff1f; 3.5研究测试&#xff1a;hujiaoai.cn 4研究测试&…

TypeScript学习日志-第三十二天(infer关键字)

infer关键字 一、作用与使用 infer 的作用就是推导泛型参数&#xff0c;infer 声明只能出现在 extends 子语句中&#xff0c;使用如下&#xff1a; 可以看出 已经推导出类型是 User 了 二、协变 infer 的 协变会返回联合类型&#xff0c;如图&#xff1a; 三、逆变 infer…

Redis - 优惠卷秒杀

场景分析 为了避免对数据库造成压力&#xff0c;我们在新增优惠卷的时候&#xff0c;可以将优惠卷的信息储存在Redis中&#xff0c;这样用户抢购的时候访问优惠卷信息&#xff0c;通过Redis读取信息。 抢购流程&#xff1a; 业务分析 既然在新增优惠卷的时候&#xff0c;我…

【数据结构与算法】之堆的应用——堆排序及Top_K问题!

目录 1、堆排序 2、Top_K问题 3、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 1、堆排序 对一个无序的数组…

安卓开发--安卓使用Echatrs绘制折线图

安卓开发--安卓使用Echatrs绘制折线图 前期资料安卓使用Echarts绘制折线图1.1 下载 Echarts 安卓资源1.2 新建assets文件1.3 新建布局文件1.4 在布局文件中布局WebView1.5 在活动文件中调用 最终效果 前期资料 Echarts 官网样式预览: https://echarts.apache.org/examples/zh/…

Java开发者必知的时间处理工具:SimpleDateFormat类详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

【论文阅读】 YOLOv10: Real-Time End-to-End Object Detection

文章目录 AbstractIntroductionRelated WorkMethodologyConsistent Dual Assignments for NMS-free Training &#xff08;无NMS训练的一致性双重任务分配&#xff09;Holistic Efficiency-Accuracy Driven Model Design &#xff08;效率-精度驱动的整体模型设计&#xff09; …

ABB 任务 模块 程序

1&#xff0c;任务由模块组成 &#xff0c; 2&#xff0c;模块分为程序模块和系统模块 3&#xff0c;可以通过新建程序模块和删除程序模块 4.可以在程序模块中构建程序 5&#xff0c;系统模块不能够被删除 6&#xff0c;main 程序主要体现在自动运行中

C++—— set、map、multiset、multimap的介绍及使用

目录 关联式容器 关联式容器的特点和使用场景 树形结构与哈希结构 树形结构 哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的使用 multimap 关联式容器 C标准模板库&#xff08;STL&#xff09;中的关联…

【2024最新华为OD-C卷试题汇总】传递悄悄话的最长时间(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; 文章目录 前…

Mysql插入中文内容报错解决及其Mysql常用的存储引擎说明

一、问题描述 我们在Mysql数据库的表中插入带有中文内容时报错,提示【1366 - Incorrect string value: \xE5\x8C\x97\xE4\xBA\xAC... for column UserDealer at row 1】,如下图所示: 二、问题分析 一般来说插入中文内容有问题我们首先想到的就是编码问题;我们可以查看该表使…