在jetson xavier nx上制作docker镜像

概览:

一、docker简介

  1. 用途:对于一项工程,不同的机器都需要单独为其配置环境,且有时配环境是一件相当麻烦的事情。那么,有没有一种方法可以把工程代码和其所需的环境配置一同发布呢?——Docker。有了Docker,我们就可以开发部署一套流程走完~Docker文档链接

  2. 历史:2010年,在美国成立了一家公司,名为dotCloud,该公司把研究的一项容器化技术命名为Docker,Docker刚刚诞生的时候并没有引起行业的注意;2013年,Docker开源,由于其实用性受到广大用户的喜爱。Docker链接

  3. 更具体的像如何安装docker以及docker命令等这里不细讲,推荐一个视频

二、在jetson xavier nx上制作docker镜像

  • 拉取官方镜像
    jetson xavier nx开发板上是有预装docker的,可以用systemctl start docker启动docker,用docker version查看docker版本;注意,jetson xavier nx是有官方镜像的(非常感谢xy师兄提前提醒),地址见链接,在Query里填入jetson就可以选取自己需要的镜像了。以镜像NVIDIA L4T PyTorch为例:
    (1)拉取镜像(可选择需要的pytorch和torchvision版本的镜像):
    sudo docker pull nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3
    (2)开启一个容器:
    sudo docker run -it --rm --runtime nvidia --network host nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3
    注意,若一个容器需要多次开启,最好上述命令不要带--rm,因为下次开启的时候传到里面的文件会被删除了。个人感觉最好是把文件夹通过-v挂载上去,需要注意的是:挂载的文件夹在外部如何改变,容器里面会相应改变;在容器里面对挂载的文件夹做改变,外部也会相应改变。命令如下:
    sudo docker run -it --rm --runtime nvidia --network host -v /home/user/project:/location/in/container nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3

  • 安装常用库opencv-4.1.0
    在jetson nx的镜像里装opencv并不像电脑上一键pip install轻松搞定,相反,采取这样的方式会有奇奇怪怪的报错,若跟着报错一步步查找修改,只能是“惶惶不见终日”了。好笑的是,当时在查opencv报错时,不知何时进入耳朵的“心平气和,做只大ne"时刻萦绕脑海,嗯,所以还是有必要把它挂在这次的博客上的。
    (1). updating the packages:
    apt update
    apt install -y build-essential cmake git libgtk2.0-dev pkg-config libswscale-dev libtbb2 libtbb-dev
    apt install -y python-dev python3-dev python-numpy python3-numpy
    apt install -y curl
    (2). install video & image formats:
    apt install -y libjpeg-dev libpng-dev libtiff-dev libjasper-dev
    apt install -y libavcodec-dev libavformat-dev
    apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
    apt install -y libv4l-dev v4l-utils qv4l2 v4l2ucp libdc1394-22-dev
    (3). download opencv & contribs modules:
    curl -L https://github.com/opencv/opencv/archive/4.1.0.zip -o opencv-4.1.0.zip
    curl -L https://github.com/opencv/opencv_contrib/archive/4.1.0.zip -o opencv_contrib-4.1.0.zip
    (4). unzipping packages:
    apt-get install unzip
    unzip opencv-4.1.0.zip
    unzip opencv_contrib-4.1.0.zip
    cd opencv-4.1.0/
    (5). create directory:
    apt-get install mkdir
    mkdir release
    cd release
    (6). build opencv using Cmake:
    cmake -D WITH_CUDA=ON \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
    -D WITH_GSTREAMER=ON \
    -D WITH_LIBV4L=ON \
    -D BUILD_opencv_python2=ON \
    -D BUILD_opencv_python3=ON \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local ..
    (7). compile opencv
    make -j4
    make install

  • 上述是opencv-4.1.0的安装方式,若编译不成功,可查看opencv-4.1.0/.cache/中是否缺少文件,它的文件结构应如下所示,具体可参考这篇博客

    • .cache
      • xfeatures2d
        • boostdesc
          • 0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i
          • 0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i
          • 202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i
          • 232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i
          • 324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i
          • 98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i
          • e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i
        • vgg
          • 151805e03568c9f490a5e3a872777b75-vgg_generated_120.i
          • 7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i
          • 7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i
          • e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i

若真的是缺少文件,则下载放好后,用make -j8make install就可重新编译opencv_contrib模块了。
暂时想到这些,先记录一下,如果发现有不当的地方,欢迎指正哦~~

[^1] Docker文档链接.
[^2] Docker链接.
[^3] 视频.
[^4] 英伟达镜像.
[^5] 编译OpenCV以及openc_contrib提示缺少boostdesc_bgm.i文件出错的解决.

上一篇:英伟达 Jetson Nano 新手必备:你的第一个 Jetson 容器


下一篇:Jetson Nano 安装ROS+OpenCV3.2.0+Turtlebot2 错误整理