Mian的笔记
  • 首页
  • 文档 ▾
    • 无人机实验
    • 无人机工程
  • 关于
输入关键词开始搜索

9.1_Docker标准化运行环境

Mian 发布于 2026-05-13

  • 📒 无人机实验
  • 🏷️ ROS1
  • 🏷️ 仿真
  • 🏷️ FlightMare
  • 🏷️ Unity
  • 🏷️ docker
  • 🏷️ vitfly

前言

在运行vitfly无人机仿真数据采集时,发现在headless服务器运行虚拟显示器,采集视觉数据总会遇到问题,于是改为在本地PC上采集数据。而为了标准化,想到本地环境也可以使用docker。

实验流程

镜像构建

首先给出如下的Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
FROM nvidia/cuda:11.8.0-devel-ubuntu20.04

ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC

# ---- ROS 仓库 + 系统基础依赖 + ROS Noetic ----
RUN apt update && apt install -y curl gnupg2 lsb-release && \
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list' && \
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - && \
apt update && \
apt install -y --no-install-recommends ros-noetic-desktop-full

# ---- 系统依赖 ----
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
python3-pip \
build-essential \
cmake \
libzmqpp-dev \
libopencv-dev \
unzip \
python3-catkin-tools \
mesa-utils \
libxcb-icccm4 \
libxcb-image0 \
libxcb-keysyms1 \
libxcb-randr0 \
libxcb-render-util0 \
libxcb-shape0 \
libxcb-xinerama0 \
libxcb-xkb1 \
libxkbcommon-x11-0 \
&& rm -rf /var/lib/apt/lists/*

# ---- python 依赖 ----
RUN pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip3 install --no-cache-dir \
torch==2.4.1 \
torchvision==0.19.1 \
numpy==1.24.4 \
pandas==2.0.3 \
matplotlib==3.7.5 \
opencv-python==4.10.0.84 \
pyyaml==5.3.1 \
uniplot==0.16.2 \
ConfigArgParse==1.7 \
scipy \
tensorboard==2.14.0

# ---- ros 初始化 + bashrc ----
RUN echo "source /opt/ros/noetic/setup.bash" >> /root/.bashrc

ENV FLIGHTMARE_PATH=/root/vitfly_ws/src/vitfly/flightmare
ENV NVIDIA_DRIVER_CAPABILITIES=compute,graphics,display

SHELL ["/bin/bash", "-c"]
CMD ["bash"]

其中的基础镜像部分,ros官方其实提供了自己的docker镜像,可以用以下方式拉取

1
sudo docker pull osrf/ros:noetic-desktop-full

但是由于本实验需要使用nvidia显卡即会用到cuda,可以预见的从配置好cuda的基础镜像去下载ros,会比从配置好ros的基础镜像去下载cuda更方便。在dockerfile所在文件夹运行docker build -t vitlfy .构建镜像

本地运行

使用以下脚本来运行容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Allow Docker containers to connect to the X server
xhost +local:docker > /dev/null 2>&1

docker run -it --rm \
--gpus all \
--device=/dev/dri:/dev/dri \
--ipc=host \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-e DISPLAY=$DISPLAY \
-e QT_X11_NO_MITSHM=1 \
-e XAUTHORITY=/root/.Xauthority \
-v $HOME/.Xauthority:/root/.Xauthority:ro \
-e XDG_RUNTIME_DIR=/tmp \
-v path/to/vitfly_ws:/root/vitfly_ws \
--network host \
--name vitfly \
vitfly

这里有许多参数的作用是为了让容器中运行的程序能够在问宿主机上显示出来

服务器运行

在服务器上可以简化上述运行脚本

1
2
3
4
5
6
docker run -d \
--gpus all \
--network host \
-v path/to/vitfly_ws:/root/vitfly_ws \
--bane vitfly
vitfly

后续改进

尝试是否能在服务器上的容器中用虚拟显示器来采集数据,现在采集了数据还要上传到服务器还是太复杂了,希望本地仅用来运行测试。

Docker 入门知识

上一篇
Mian

Mian

每天成长一点

25
2
30
目录
  1. 1. 前言
  2. 2. 实验流程
    1. 2.1. 镜像构建
    2. 2.2. 本地运行
    3. 2.3. 服务器运行
  3. 3. 后续改进
CATEGORIES
  • 无人机实验 (17)
  • 无人机工程 (8)
TAGS
AprilTag CPP FlightMare Gazebo IntelRealsenseD435 MAVROS NUC13 Python ROS1 Ubuntu20-04 Unity astar catkin cmake docker drone octomap px4 rosbag vins vitfly 仿真 动力学 参数服务器 实机 建图 模块化 视觉定位 路径规划 飞控

© 2026 Mian

Powered by Hexo Theme - flex-block

🌞 浅色 🌛 深色 🤖️ 自动