Docker交互
Docker交互1、Bash脚本1.1、基础使用(Docker)1.2、运行脚本2、共享数据2.1、共享文件夹2.2、共享网络3、共享硬件3.1、共享图形界面3.2、普通摄像头3.3、深度相机
教程主要介绍主机与Docker之间的数据和硬件交互。
1、Bash脚本
Bash(Bourne Again SHell)是一种用于自动化任务的脚本语言,用户可以将多条命令组合在一起并按顺序执行!
Docker命令提供可选参数启动容器,但参数过多会影响命令的阅读和理解
1.1、基础使用(Docker)
基本脚本
x #!/bin/bash docker run -it \ <image_name>:<tag> /bin/bash
示例脚本
将示例写入ros_melodic.sh文件:
xxxxxxxxxx gedit ros_melodic.sh xxxxxxxxxx #!/bin/bash docker run -it \ ros_melodic:1.0 /bin/bash

1.2、运行脚本
xxxxxxxxxx sh ros_melodic.sh

2、共享数据
2.1、共享文件夹
共享主机的share文件夹到Docker。
示例脚本
xxxxxxxxxx #!/bin/bash docker run -it \ -v /home/yahboom/share:/share \ ros_melodic:1.0 /bin/bash

2.2、共享网络
共享主机的网络到Docker。
示例脚本
xxxxxxxxxx #!/bin/bash docker run -it \ \--net=host \ -v /home/yahboom/share:/share \ ros_melodic:1.0 /bin/bash
若无法使用ifconfig命令,安装net-tools:
xxxxxxxxxx sudo apt install net-tools -y xxxxxxxxxx ifconfig

3、共享硬件
3.1、共享图形界面
Docker运行图形界面的程序,需要输出到本地显示图形界面。
示例脚本
xxxxxxxxxx #!/bin/bash xhost + docker run -it \ \--net=host \ -e DISPLAY=$DISPLAY \ -e "QT_X11_NO_MITSHM=1" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /home/yahboom/share:/share \ ros_melodic:1.0 /bin/bash

3.2、普通摄像头
普通摄像头映射到Docker:只需要将摄像头对应的/dev/video*设备号添加进去
xxxxxxxxxx 若只接一个摄像头,一般对应/dev/video0
示例脚本
x #!/bin/bash xhost + docker run -it \ \--net=host \ -e DISPLAY=$DISPLAY \ -e "QT_X11_NO_MITSHM=1" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /home/yahboom/share:/share \ \--device=/dev/video0 \ ros_melodic:1.0 /bin/bash

3.3、深度相机
深度相机相比于普通摄像头需要添加额外信息才可以调用摄像头:以Astra Pro举例
查看USB设备信息
xxxxxxxxxx lsusb

我们需要关注的信息:USB总线编号、USB总线上的设备编号、设备的供应商ID、产品ID
x Bus 003 Device 005: ID 2bc5:0403 Orbbec 3D Technology International, Inc Astra Pro Bus 003 Device 006: ID 2bc5:0501 Orbbec 3D Technology International, Inc Astra Pro HD Camera
USB总线编号:Bus 003
USB总线上的设备编号:Device 005、Device 006
设备的供应商ID:2bc5
产品ID:0403、0501
根据供应商ID和产品ID可以定位设备以及设备ID重映射,其中USB总线编号和USB总线上的设备编号影响Docker内连接设备。
设备ID重映射
此处不介绍绑定的过程及方法,直接展示结果,设备ID重映射并不属于该教程内容。
每次启动docker需要注意深度相机对应的USB总线编号和USB总线上的设备编号,若两者不一致,Docker内启动相机会一直提示无法连接设备。

示例脚本
x #!/bin/bash xhost + docker run -it \ \--net=host \ -e DISPLAY=$DISPLAY \ -e "QT_X11_NO_MITSHM=1" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /home/yahboom/share:/share \ -v /dev/bus/usb/003/005:/dev/bus/usb/003/005 \ -v /dev/bus/usb/003/006:/dev/bus/usb/003/006 \ \--device=/dev/astra_pro \ \--device=/dev/astrauvc \ \--device=/dev/video0 \ \--device=/dev/video1 \ ros_melodic:1.0 /bin/bash
