学习docker的教程:可以直接在菜鸟教程上学习即可
阶段 0:系统检查
| 内容 | 建议 |
|------|------|
| 操作系统 | Ubuntu 22.04(与 ROS2 Humble 最匹配) |
| 用户权限 | 能执行 sudo |
🧩 阶段 1:在 Ubuntu 上安装 Docker(官方推荐方式)
1.1 卸载旧版本(若有)
sudo apt remove docker docker-engine docker.io containerd runc
作用:避免冲突。
1.2 更新 apt 包索引 & 装依赖
sudo apt update
sudo apt install \ca-certificates \curl \gnupg \lsb-release
作用:curl 用来下载 GPG key,lsb-release 用来识别系统版本。
1.3 添加 Docker 官方 GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
作用:验证软件包来源,防止被篡改。
1.4 添加仓库源
echo \"deb [arch=$(dpkg --print-architecture) \signed-by=/etc/apt/keyrings/docker.gpg] \https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
作用:告诉 apt 去哪里下载 Docker 最新版。
1.5 更新并安装 Docker Engine + CLI + containerd
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
作用:一次性装好核心组件。
1.6 验证安装成功
sudo docker run hello-world
看到 “Hello from Docker!” 字样就成功了。
1.7(可选)让当前用户免 sudo 用 Docker
sudo usermod -aG docker $USER
newgrp docker
作用:避免每次命令前都写 sudo,提升开发体验。
🧱 阶段 2:拉取 ROS2 镜像(回顾 + 补充)
docker pull osrf/ros:humble-desktop-full
> 作用:一次性把 ROS2 Humble 桌面完整版(ROS + RViz + Gazebo)下载到本地。镜像约 4 GB,耐心等待。
🐳 阶段 3:启动 ROS2 容器(带 GUI 支持)
3.1 允许宿主机显示 GUI
xhost +local:docker
> 作用:让容器里的 GUI 程序能把窗口投射到宿主机。
3.2 创建并进入容器
docker run -it \--name ros2_dev \--env="DISPLAY=$DISPLAY" \--env="QT_X11_NO_MITSHM=1" \--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \--volume="$HOME/ros2_ws:/root/ros2_ws" \osrf/ros:humble-desktop-full \bash
指令解析
| 参数 | 作用 |
| ---------- | --------------------- |
| `-it` | 交互模式,允许你进入容器内部 |
| `--name` | 给容器起个名字,方便管理 |
| `--env` | 设置环境变量,支持 GUI(如 RViz) |
| `--volume` | 挂载宿主机目录到容器里,方便代码共享 |
| `bash` | 容器启动后执行的命令,进入 shell |
> 作用:把宿主机目录 `$HOME/ros2_ws` 挂载到容器 `/root/ros2_ws`,实现**代码持久化**;同时打通 X11,让 RViz/Gazebo 能弹出窗口。
🧑💻 阶段 4:在容器内测试 ROS2
source /opt/ros/humble/setup.bash
ros2 run turtlesim turtlesim_node
看到小乌龟窗口 = ✅ GUI 正常。
🛠️ 阶段 5:创建并编译 C++ ROS2 功能包(回顾 + 详细)
`bash
在容器里操作
cd /root/ros2_ws
source /opt/ros/humble/setup.bash
ros2 pkg create --build-type ament_cmake my_cpp_pkg --dependencies rclcpp std_msgs
5.1 写节点代码
vim my_cpp_pkg/src/my_node.cpp
粘贴:
#include "rclcpp/rclcpp.hpp"int main(int argc, char **argv)
{rclcpp::init(argc, argv);auto node = std::make_shared<rclcpp::Node>("my_first_node");RCLCPP_INFO(node->get_logger(), "Hello from Docker + ROS2 + C++!");rclcpp::spin(node);rclcpp::shutdown();return 0;
}
5.2 修改 CMakeLists.txt(让可执行文件被编译)
在 `my_cpp_pkg/CMakeLists.txt` 末尾追加:
```cmake
add_executable(my_node src/my_node.cpp)
ament_target_dependencies(my_node rclcpp)install(TARGETSmy_nodeDESTINATION lib/${PROJECT_NAME})
```
5.3 编译
cd /root/ros2_ws
colcon build --packages-select my_cpp_pkg
source install/setup.bash
ros2 run my_cpp_pkg my_node
🧰 阶段 6:用 VS Code 远程开发(可选但强烈推荐)
6.1 宿主机安装 VS Code 插件
- Remote-Containers #安装这个插件
- Docker
6.2 连接容器
1. 打开 VS Code
2. F1 → `Dev Containers: Attach to Running Container`
3. 选 `ros2_dev`
4. 打开 `/root/ros2_ws` 目录
5. 安装 C++ 扩展、ROS 扩展,即可补全、调试
📦 阶段 7:把环境固化成镜像(可选)
如果你团队其他人也想用同样环境,可以写个 Dockerfile:
```Dockerfile
FROM osrf/ros:humble-desktop-full
# 安装常用工具
RUN apt-get update && apt-get install -y \vim \git \gdb \&& rm -rf /var/lib/apt/lists/*
把源码也放进去(演示)
COPY ./src /root/ros2_ws/src
WORKDIR /root/ros2_ws
RUN /bin/bash -c "source /opt/ros/humble/setup.bash && colcon build"
构建并推送:
docker build -t my_ros2_cpp:latest .
docker tag my_ros2_cpp:latest your_dockerhub_user/my_ros2_cpp:latest
docker push your_dockerhub_user/my_ros2_cpp:latest