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

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

这里想借助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 报错处理

相关推荐

  1. docker 安装镜像使用命令

    2024-05-26 02:19:05       8 阅读
  2. CentOS中docker安装镜像源配置

    2024-05-26 02:19:05       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-26 02:19:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-26 02:19:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-26 02:19:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-26 02:19:05       20 阅读

热门阅读

  1. ModuleNotFoundError: No module named ‘import_export‘

    2024-05-26 02:19:05       7 阅读
  2. 网页解析之lxml与xpath

    2024-05-26 02:19:05       11 阅读
  3. Django搭建和数据迁移

    2024-05-26 02:19:05       10 阅读
  4. 【Redis精通之路】数据类型(2)

    2024-05-26 02:19:05       10 阅读
  5. 删除有序数组中的重复项-力扣

    2024-05-26 02:19:05       10 阅读
  6. springboot项目跨域设置总结

    2024-05-26 02:19:05       11 阅读