前言:
本文是一篇纯初级入门向的博客,目的只为了体验搭建一个docker的过程,实际工程并不推荐使用本篇中介绍的方法。

在使用 ROS 时,由于 Linux 系统版本与 ROS 发行版是强绑定的,不同版本之间往往无法直接兼容。这意味着如果需要使用多个 ROS 版本,就必须频繁切换系统环境,过程既麻烦又容易出现依赖冲突。

为了解决这个问题,Docker 成为了一个非常实用的工具。借助 Docker,我们可以在同一台电脑上创建不同版本的 Linux 容器,从而在对应环境中运行不同版本的 ROS,大大提升了开发效率。

虽然现在可以通过向 AI 询问 Docker 的使用方法,但在实际操作中,得到的步骤未必总是最合适或最完整。经过多次尝试和总结,我按照自己的使用习惯整理了这篇博客,用来记录 Docker 的常用操作流程,也希望能为有类似需求的朋友提供一些帮助。

第一步:安装 Docker

1.1 更新系统

1
2
sudo apt update
sudo apt upgrade -y

1.2 安装 Docker

安装 Docker 有两种方式,本文只介绍最快的方法,基于 Dockerfile 的方法请移步另外一篇 blog:

1
sudo apt install docker.io -y

1.3 启动 Docker

1
sudo systemctl start docker

并设置为开机自启:

1
sudo systemctl enable docker

1.4 把自己加入 Docker 用户组

1
sudo usermod -aG docker $USER

1.5 重启电脑并测试是否成功

1
docker --version

出现版本号则证明安装成功。


第二步:下载 ROS2 Humble 官方镜像

可以先试试直接拉取:

1
docker pull ros:humble

但很可能因为网络问题导致无法拉取,所以推荐配置镜像加速:

2.1 创建 Docker 配置文件

1
sudo mkdir -p /etc/docker

2.2 写入镜像加速地址

1
2
3
4
5
6
7
8
9
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}
EOF

2.3 重启 Docker

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

2.4 重新拉取镜像

1
docker pull ros:humble

2.5 检查配置是否成功

1
docker info

往下拉到最底,出现刚才配置过的镜像地址,则说明配置成功。

2.6 验证镜像拉取成功

1
docker images

出现 TAG 为 humble 的 ros 镜像,证明成功。


第三步:创建自己的容器

3.1 在宿主机创建工作空间

1
mkdir -p ~/ros2_ws

3.2 运行容器

注意:my_docker 是容器的名字,可以根据需要自行修改。

1
2
3
4
5
6
7
8
9
docker run -it \
--name my_docker \
--net=host \
--ipc=host \
--privileged \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/ros2_ws:/root/ros2_ws \
ros:humble-desktop

参数说明:

参数 作用
--name my_docker 容器名字叫 my_docker
-it 进入终端模式
--net=host 用宿主机网络(ROS 推荐)
--ipc=host 共享内存
--privileged 允许用 USB/串口
-v ~/ros2_ws:/root/ros2_ws 挂载代码文件夹
ros:humble-desktop 使用 Humble desktop 版本镜像

3.3 加载 ROS 环境

1
source /opt/ros/humble/setup.bash

3.4 测试是否可以使用

1
ros2 --help

出来很多命令则说明可以正常使用。

Docker 创建成功,此时容器内是一个完全”干净的系统”,类似 pip 等开发工具是不存在的,需要根据项目所需版本自己安装相应的工具包。


第四步:拉取并编译 ROS 包

4.1 加载 ROS 环境(每次进入容器都需要)

1
source /opt/ros/humble/setup.bash

如果想要一劳永逸,推荐:

1
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

4.2 进入工作空间

1
cd /root/ros2_ws

4.3 把代码放到 src 目录

1
2
3
mkdir -p src
cd src
git clone xxxxx

4.4 回到工作空间根目录并编译

1
2
cd ..
colcon build

4.5 处理缺包问题

在编译的时候可能提示缺少某些包,这是因为拉取的镜像是最精简的 ros-humble。需要根据 terminal 的提示补全依赖,例如:

1
apt install ros-humble-rosidl-generator-dds-idl -y

附录:常用指令速查

A.1 退出容器

1
exit

A.2 退出后重新进入容器

1
2
docker start my_docker
docker exec -it my_docker bash

A.3 查看所有容器

1
docker ps -a

A.4 删除容器

1
docker rm my_docker

A.5 镜像与容器的关系

一个镜像可以挂载多个容器:

  • 镜像:ros:humble
  • 容器:my_docker

A.6 容器内安装 pip

1
2
3
apt update
apt install python3-pip -y
pip3 --version

A.7 修改 Docker 挂载文件的权限

1
2
sudo chown -R $USER:$USER ~/project
sudo chmod -R 775 ~/project