Ubuntu18.04用Dockerfile配置ros+cuda+torch镜像

参考链接:
docker19.03运行ROS RVIZ可视化配置
ubuntu用Dockerfile配置ros+cuda+torch镜像及rviz可视化
docker-build镜像(ubuntu18.04+python3.8+torch+cuda)
搭建Windows+Ubuntu18.04双系统的pytorch+docker+gpu训练环境
【环境配置】使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 的镜像
史上讲解最好的 Docker 教程,从入门到精通(建议收藏的教程)

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解释

# 改一下这个pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel
# 指定新镜像所基于的镜像,第一条指令必须为FROM指令
FROM pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel
# DEBIAN_FRONTEND这个环境变量,告知操作系统应该从哪儿获得用户输入。
# 如果设置为”noninteractive”,你就可以直接运行命令,而无需向用户请求输入
ARG DEBIAN_FRONTEND=noninteractive
# 配置国内源地址
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

NVIDIA_VISIBLE_DEVICES参数参考:https://www.cnblogs.com/joexu01/archive/2022/08/01/16539619.html
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES \
    ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
    ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

# 不用改
# 修复 Nvidia Apt 存储库公钥错误:https://jdhao.github.io/2022/05/05/nvidia-apt-repo-public-key-error-fix/
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

# 不用改
# 更换ROS源
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

# 安装ros-melodic-desktop-full   
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/*

最终版本Ubuntu18.04用Dockerfile配置ros-melodic+cuda11.3+torch-1.10.1+torchaudio-0.10.1+torchvision-0.11.2镜像

#模板
FROM nvidia/cuda:11.3.0-cudnn8-devel-ubuntu18.04
 

RUN rm /etc/apt/sources.list.d/cuda.list
ARG DEBIAN_FRONTEND=noninteractive
ADD sources.list /etc/apt/

# 作者
MAINTAINER SunPengfei
 
#环境变量
ENV TZ Asia/Shanghai
ENV LANG zh_CN.UTF-8

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



# pytorch文件torch-1.10.1+torchaudio-0.10.1+torchvision-0.11.2
COPY torch-1.10.1+cu113-cp36-cp36m-linux_x86_64.whl /tmp
COPY torchaudio-0.10.1+cu113-cp36-cp36m-linux_x86_64.whl /tmp
COPY torchvision-0.11.2+cu113-cp36-cp36m-linux_x86_64.whl /tmp
 
 
# 替换阿里源
RUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.aliyun.com/#' /etc/apt/sources.list \
    && sed -i 's#http://security.ubuntu.com/#http://mirrors.aliyun.com/#' /etc/apt/sources.list
 
# 更新软件
RUN apt-get update -y \
    && apt-get -y install net-tools \
    && apt-get -y install vim \
    && apt-get -y install openssh-server \
    && apt-get -y install python3.6 \
    && apt-get -y install python3-pip python3-dev \
    && cd /usr/local/bin \
    && rm -f python \
    && rm -f python3 \
    && rm -f pip \
    && rm -f pip3 \
    && ln -s /usr/bin/python3.6 python \
    && ln -s /usr/bin/python3.6 python3 \
    && ln -s /usr/bin/pip3 pip \
    && ln -s /usr/bin/pip3 pip3 \
    && python -m pip install --upgrade pip \
	&& cd /tmp \
	&& pip3 install torch-1.10.1+cu113-cp36-cp36m-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple/ \
	&& pip3 install torchaudio-0.10.1+cu113-cp36-cp36m-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple/ \
	&& pip3 install torchvision-0.11.2+cu113-cp36-cp36m-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple/ \
    && apt-get clean \
    && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/* 


RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

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 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文件放一起
ADD sources.list /etc/apt/

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

torch-1.10.1+cu113-cp36-cp36m-linux_x86_64.whl 这一系列安装包要自行下载放到dockerfile文件放一起

docker简单命令

docker中镜像和容器的区别
Docker:可视化管理工具Portainer与分析创建管理员账号错误的原因

出现问题:\

问题一:QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root’

解决方法:
完美解决XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root‘

问题二:qt.qpa.screen: QXcbConnection: Could not connect to display ’:2.0’

解决方法:
QXcbConnection: Could not connect to display 的两种解决方法

问题三:[FATAL] [1678250622.904302134]: Can’t open default or :0 display. Try setting DISPLAY environment variable.

Docker使用RVIZ
记录使用docker运行ros过程中遇到的问题

docker基本命令

1,查看此时正在运行的容器和镜像

查看容器

sudo docker ps 

查看镜像

sudo docker images

2,创建容器

镜像只是一个可读的配置文件,真正用来运行程序的是容器,因此我们需要根据镜像创建一个容器~

sudo docker run -it ros_pytorch_ubuntu18.04 /bin/bash

-i:交互式操作
-t:终端
lingjunlh/torch1.9.1-cuda11.1:v1:镜像名称:镜像标签
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

3,该容器就是我们刚刚所创建的用于本地测试代码的容器,用docker attach进入容器

sudo docker attach 500ad76de1cf

这个bash退出也不会影响之前 docker run 启动的 bash

docker exec -it 40c330755e61 /bin/bash

4,容器是动态的,镜像是静态的。我们在容器里更新了Python包,为了以后可以持久地使用,还需要使用commit将容器打包为镜像。

docker commit -m="update packages" -a="XXX" 26569156de64 XXX/pymarl:v1

-m: 提交的描述信息
-a: 指定镜像作者
26569156de64:容器
IDXXX/mypymarl:v1: 指定要创建的目标镜像名(作者名/镜像名:标签)

5,通过conda install或者pip install在容器内安装所需要的包

6,在本地使用容器运行代码

为了测试镜像能否正常运行我们的代码,可以现在本地用容器测试一下。

首先我们需要创建一个本地Ubuntu系统和docker容器共享的文件夹:

sudo mkdir /data
sudo docker run -v /data:/data -itd zhouxuanhan/pymarl:v1 bash

然后将代码文件复制到Ubuntu系统的/data目录下,这样该目录就和容器内部的/data目录连通了。

7,exit退出

8,删除容器和镜像

停止所有的容器

docker stop $(docker ps -a -q)

删除容器
先停止容器(f66前三个字符)运行,再去删除镜像(df1)。

docker rm f66

删除镜像
使用命令“docker rmi 镜像ID”删除的镜像,只取“IMAGE ID”的前3个字符即可。

docker rmi df1

运行测试

docker19.03运行ROS RVIZ可视化配置

第一步,创建docker container

xhost +local:
docker run --gpus all -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY --name my_container roborts_image /bin/bash

第二步,Docker容器配置:

export ROS_MASTER_URI=http://192.168.1.104:11311 			# IP是master
export ROS_IP=192.168.1.104									# 这里Ip是本机的
source /opt/ros/melodic/setup.bash
source ~/.bashrc

第三步,测试

一个终端打开

roscore

再打开一个终端

docker exec -it 40c330755e61 /bin/bash

进入容器,再输入

rviz

请添加图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值