赞
踩
因工作环境,需要有深度学习的那一套环境,还要用到一些可视化的东西,比如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 iputils-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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。