やりたいこと
Dockerコンテナ内で、ホストPCにつながったusbカメラを起動して、その(動)画像を表示したい。
必要条件
- Docker
- Nvidia driver
- Nvidia Docker
これらのインストール方法は省略させていただきます。
なお、以下でご紹介するDockerfileとrunスクリプトはNvidia Docker 1用です。Nvidia Docker 2をお使いの方は適切に修正する必要があります。
ソースコード
ディレクトリ構造
hoge/
┣ Dockerfile
┗ run.sh
Dockerfile
########## Pull ########## FROM ros:kinetic ########## uvc_camera ########## RUN apt-get update && apt-get install -y \ ros-kinetic-uvc-camera \ ros-kinetic-image-view && \ echo "#!/bin/bash \n roscore & \n rosrun uvc_camera uvc_camera_node & \n rosrun image_view image_view image:=image_raw" >> /home/live.sh && \ chmod +x /home/live.sh ########## nvidia-docker1 hooks ########## LABEL com.nvidia.volumes.needed="nvidia_driver" ENV PATH /usr/local/nvidia/bin:${PATH} ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64:${LD_LIBRARY_PATH}
run.sh
#!/bin/bash xhost + nvidia-docker run -it --rm \ --env="DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --device=/dev/video0 \ usb_camera:latest \ /bin/bash /home/live.sh
使いたいカメラに応じてdeviceのパス(例:/dev/video0)は変更する必要があります。
usbカメラの検出名は以下のコマンドで調べることができます。
$ ls /dev/video*
使い方
イメージのビルド
$ cd (上記のDockerfileがあるディレクトリ) $ docker build -t usb_camera:latest .
コンテナのラン
($ chmod +x run.sh) $ ./run.sh
さいごに
Dockerコンテナ内でimage_viewを含むGUIを使う場合は、今回のようにNvidia Dockerを使う必要があるので少し複雑になります。
少しでも参考になれば幸いです。
以上です。
追記
私がDockerの基礎を勉強した本を載せておきます。
Ad.
コメント