ubuntu用Dockerfile配置ros+cuda+torch镜像及rviz可视化

dockerfile配置ros+cuda+torch镜像及rviz可视化

  • Dockerfile
  • 创建容器

Dockerfile

因工作环境,需要有深度学习的那一套环境,还要用到一些可视化的东西,比如rviz、open3d等。
下面从docker hub上找到一个合适的基础镜像,在此基础之上,进行ros的配置,Dockerfile如下:

FROM pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel
ARG DEBIAN_FRONTEND=noninteractive
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES \
    ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
    ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub
RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub

RUN apt-get update \
  && apt-get install -y lsb-release gnupg

RUN sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
RUN apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

RUN apt-get update \
 && apt-get install -y ros-melodic-desktop-full \
 && apt-get install -y vim inputils-ping openssh-server \
 && echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc \
 && apt-get -y update --fix-missing \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*
dockerfile创建完成后即可执行docker build生成镜像,在dockerfile文件下开启终端运行:
$ docker build -t docker_image_name .

创建容器

创建一个shell脚本run_my_image.bash, 一般创建脚本如下,但涉及到rviz可视化显示,需要进容器修改sshd_config参数。

docker run -itd \
	--gpus all \
	--name test \
	--user 123 \
	--shm-size 8g \
    --volume="/work_dir:/work_dir" \ # 宿主机目录:容器目录
    --volume="/data:/data" \
    --runtime=nvidia \
    -p 8888:22 \
    docker_images \
    bash  # bash -c "roscore & rviz"

创建一个shell脚本run_my_image.bash

docker run -itd \
	--gpus all \
	--shm-size 8g \
    --env="DISPLAY=$DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    --volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
    --runtime=nvidia \
    --name docker_test \
    -p 8888:22 \
    docker_images \
    bash  # bash -c "roscore & rviz"

这里--net采用默认的bridge模式,如果在其他机器上通过docker exec进入容器rviz界面会在宿主机上显示,并不是在你运行容器的机器上显示,这个问题解决办法:

1、在创建容器的时候加上--net=host,可以解决该问题,但端口映射又会存在无法映射的问题

2、修改sshd_config

vim /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
x11UseLocalhost no
修改sshd_config后重启ssh
service ssh start
设置容器密码:
passwd
ssh远程连接容器
ssh -X root@ip -p 8888  # ip是宿主机的ip,-p 是映射的端口
进去之后,可以测试rviz可视化
roscore & rviz

你可能感兴趣的:(ubuntu,ubuntu,linux,运维)